전체 글92 SpringBoot 커스텀 프로퍼티에 대한 문서와 자동완성 ※ Spring Configuration Processor 외부설정 문서화 yml 혹은 properties 파일에 프로퍼티 설정시 SpringBoot에 이미 정의되어 있는 document랑 자동완성을 확인할 수 있다. 개발자가 커스텀한 값들에 대해서도 문서랑 자동완성ㅇ을 지원하는 방법에 대해 알아보자. Spring Configuration Processor란? application.properties, application.yml 파일 등에 넣는 커스텀 설정의 자동 완성, 도움말 등을 지원해주는 도구이다. 실습 환경 Spring Boot 3.2.0 Gradle 8.2 라이브러리 의존성 추가 dependencies { annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'.. Tech/Spring 2024. 4. 17. @Transactional과 @Transactional(readonly = true)를 어떤 목적으로 설정하나요? 면접에서 아래 코드에 대한 구조 리뷰를 요청 받았습니다. @Service @Transactional(readOnly = true) public class StationService { private StationRepository stationRepository; public StationService(StationRepository stationRepository) { this.stationRepository = stationRepository; } @Transactional public StationResponse saveStation(StationRequest stationRequest) { Station station = stationRepository.save(new Station(station.. 카테고리 없음 2024. 4. 12. 4년차 개발자 퇴사 회고 ※ 가영이가 타고 있는게 빗자루 인줄 알았는데 이누야샤 였다는 사실을 최근에야 알았습니다 (소름) 안녕하세요.김X철 입니다. 제가 퇴사 회고를 작성할 줄은 꿈에도 몰랐네요..신입으로 입사해 만 3년째 다닌 회사를 오늘부로 마지막 출근을 하였습니다. 선 퇴사를 결정하게 된 이유는 현재 회사에선 성장의 한계를 느껴서 결정하게 되었습니다.이유는 다음과 같습니다.💡 개발 문화에 대한 관심좋은 개발 문화를 직접 경험 하고 싶었습니다. 좋은 개발 문화를 위해 팀에서 하지 않는 새로운 시도를 많이 해보았습니다. 팀원들에게 지식을 공유하고 테스트 코드 작성도 해보고, 코드 리뷰도 해보고, 젠킨스도 구축하여 회사 내 개발팀 최초로 자동화 배포 까지 구축 해보았습니다.하지만 이런것들이 과연 좋은 일들인가?.. 회고 2024. 4. 9. ssh 사용하지 않고 idc 서버 환경에서 백엔드 jenkins cicd 구축 현재 다니고 있는 회사의 전체 개발팀에 CI/CD가 구축되어 있지 않습니다. 진행중인 SI 프로젝트에서는 고객사의 인프라 팀이 Jenkins와 AWS를 활용해 배포 시스템을 구축해주어 배포를 편리하게 진행할 수 있었습니다. 그러나 내부 프로젝트는 FTP를 통해 JAR 파일을 수동으로 업로드하고, 쉘 스크립트로 애플리케이션의 시작, 정지, 재시작 과정으로 배포를 하고 있습니다. 개발 과정에서 빈번한 수정으로 인해 주기적인 배포가 필요했습니다. 이를 위해 아직 커밋하지 않은 코드는 stash에 저장한 뒤, 수동으로 JAR 파일을 빌드하고 배포하는 작업을 최소화하기 위해 CI/CD 시스템 구축을 추진하였습니다. 내부 프로젝트는 IDC 서버를 사용중이었습니다. 제한사항은 다른 고객사에서 임대한 서버를 사용하고 .. 인프라/Jenkins 2024. 3. 12. ATDD, 클린 코드 with Spring 8기 종료 (모든 미션 수료) 과정이 2월 29일에서 일주일 연장되어 3월 6일날 모든 미션을 수료하였다. TDD 과정을 수료하고 배운걸 까먹지 않고 복리의 효과를 보기 위해 ATDD까지 수강 신청을 하였는데 정말 잘한것 같다. TDD 때는 잠을 줄이면서 까지 미션을 진행했는데 그 효과때문인지는 몰라도 ATDD 때는 잠은 푹자면서 미션을 진행했다. (그래도 힘들긴 했다 ㅎ) 어떻게 구현해야하나 고민을 하면서 고통을 느낄 때 마다 내가 성장하고 있구나!! 라고 위안을 삼았다. 이제는 테스트 코드에 많이 익숙해 졌다. 단위 테스트는 통과 했지만 막상 인수 테스트는 통과하지 못한 경우를 몸소 느끼면서 인수 테스트가 방어막 역할을 톡톡히 해주는구나 라고 느꼈다. 이번 과정에서도 다시 한번 객체지향적인 코드와 의존성을 고려한 설계에 대해서 많.. 외부활동/ATDD, 클린 코드 with Spring 8기 2024. 3. 6. UI에 의존적인 개발을 하지 말자 UI에 의존적인 개발을 하지 말자 프로젝트의 유연성과 지속적으로 키워나가기 위해서는 UI에 의존하면 안된다. 도메인 관점 현재 요구사항 상품 목록을 출력한다 JSON [ { "name": "사과", "category": "과일", "price": 1000 }, { "name": "독도로션", "category": "화장품", "price": 1000 } ] 코드 public class Product { private Long id; private String name; private String category; private Integer price; public Long id() { return id; } public String name() { return name; } public String c.. 개발 생각 2024. 3. 6. 인수 테스트와 TDD 회고 Step1 구간 추가 요구사항 반영 Step1 구간 추가 요구사항 반영 PR 2주차부터 본격 적인 미션의 시작이였다. 난이도가 올랐기 때문이다. Line line = findBy(lineId); Sections sections = findBy(line); 지하철역의 리스트를 검증하는 부분에서 containsOnly를 사용했다. 아래와 같은 피드백을 받았다. 💡 같은 findBy인데 lineId를 넣으면 line이, line을 넣으면 sections가 나오는게 어색하게 느껴져요! 받는 변수타입으로 구분할 수 있지만 메소드명으로 구분해주는게 코드 가독성에 좋을 것 같아 아래와 같이 수정하였다. Line line = findLineBy(lineId); Sections sections = findSections.. 외부활동/ATDD, 클린 코드 with Spring 8기 2024. 3. 5. 인수 테스트와 E2E 테스트 회고 Step1 지하철역 인수 테스트 작성 Step1 지하철역 인수 테스트 작성 PR 미션은 총 4주차까지 있고 지하철 시스템이란 도메인을 주제로 점진적으로 발전시켜 나가면서 ATDD와 TDD를 배운다. 1주차 Step1은 RestAssured를 사용하여 지하철역 목록 조회와 삭제 API 총 2개의 테스트 코드를 작성하는 미션이다. 구현하는데 크게 어려움은 없었다. assertThat(stationsNames).hasSize(1) .containsOnly("강남역"); 지하철역의 리스트를 검증하는 부분에서 containsOnly를 사용했다. 아래와 같은 피드백을 받았다. 💡 containsExactly() 메서드를 활용해 보셔도 좋을 것 같아요 containsOnly는 순서와 중복을 고려하지 않고 명시된 값이.. 외부활동/ATDD, 클린 코드 with Spring 8기 2024. 3. 5. Jpa save vs saveAndFlush vs saveAll 안녕하세요. 회사에서 배치를 돌려 약 10만건 정도의 데이터를 삽입해야 했습니다. 1번과 2번에서 데이터를 조회 하여 데이터를 합친 후 DB에 저장하는 단순한 프로세스 였습니다. DB에 저장시 save()를 사용했다가 반나절 이상이 걸렸습니다. save()를 사용하지 않고 saveAll()로 처리 하였더니 시간이 삼분의 일로 줄어 들었습니다. 이번 기회에 Jpa에서 데이터를 저장하는 방법인 save() / saveAndFlush() / saveAll()의 차이점 대해 정리하려고 합니다. ※ 사실 벌크 삽입은 Spring JDBC의 JdbcTemplate를 이용하면 훨씬 빠르게 Batch Insert를 수행할 수 있습니다. save @Transactional @Override public S save(S .. Tech/JPA 2024. 1. 25. ATDD, 클린 코드 with Spring 8기 시작! nextstep의 TDD 17기에 이어 ATDD도 시작했다!! 공식적인 시작은 어제인 1월 22일 월요일 이였다. 이번 과정은 스프링, Jpa 기반 환경 기반으로 인수 테스트를 짜는 수업이다. TDD를 까먹기 전에 연강하는게 좋다는 생각이 들어 개설 되자마자 바로 수강신청을 했다!! TDD는 목표한 대로 기간이 끝나기 전에 모든 미션을 완료했다. ATDD도 같은 목표를 향해 달려가야겠다!! 외부활동/ATDD, 클린 코드 with Spring 8기 2024. 1. 23. TDD, 클린 코드 with Java 17기 라이브 강의 요약 (작성예정) 외부활동/TDD, 클린 코드 with Java 17기 2023. 12. 16. TDD, 클린 코드 with Java 17기 종료(모든 미션 수료) 2023년 12월 9일 토요일을 기점으로 모든 미션을 수료 하였다. 미션을 촉박하게 수행하기 싫어서 초 중반에 빠르게 달렸고, 과정이 끝나기 5일 전에 모든 미션을 수료할 수 있었다. 회사에서 코드 리뷰 문화를 직접 도입했지만 막상 스스로 코드 리뷰는 받지 못하는 환경에 있다. 코드 리뷰를 해주다 보니 나의 개발 역량에 의구심이 들었다. 반복적인 CRUD 패턴 개발 습관을 깨고 싶었고, 테스트 코드와 자바를 자바답게 사용하고 싶어 지원하게 되었다. 그리고 반드시 수료를 목표로 잡았는데 이력서에 한두줄이라도 추가하기 위해서다. 미션을 진행하면 할 수록 난이도가 어려워지고 마감 일정은 다가오니 1년 동안 지켜온 수면 패턴을 깰 수 밖에 없었다. 평일 밤, 주말에도 쉬지않고 코딩에 집중하였다. 수료 후 너무 .. 외부활동/TDD, 클린 코드 with Java 17기 2023. 12. 13. 이전 1 2 3 4 ··· 8 다음