반응형 전체 글107 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. 기술 면접 구독 서비스 - 요구사항 정의 요구사항을 처음부터 완벽하게 정의하기 보단 간단하게만 정의를 하려고 한다. 현재 버전에서는 배치 모듈과 같은 내부 동작으로만 고려 하고 있다. 화면 연동은 없고, 관리를 위헌 API만을 이용할 것이다. 서비스가 출시되고 니즈가 있으면 사용자 정보를 받아서 DB에 넣을 생각이다. 개발을 하면서 수정사항이 생기면 해당 게시글에 계속해서 업데이트 할 것이다. OOP 지향적인 개발을 위해 테이블 설계는 제일 마지막에 진행할 것이다. 요구사항 1. 유저 조회, 등록, 수정, 삭제 유저는 아이디, 이메일를 가진다. 유저를 전체 검색 할 수 있다. 정렬조건(수정일자 최신순) 유저를 상세 조회 할 수 있다. 유저는 이메일을 수정할 수 있다. 유저 C/U/D가 발생하면 유저 변경 이벤트를 발행한다 유저 변경 히스토리가 .. 프로젝트/기술면접 구독 서비스 2023. 12. 19. 기술 면접 구독 서비스 - 시작 및 적용 기술 작년 겨울쯤에 망나니 개발자님이 만들어 주신 기술 면접 구독 서비스를 신청한 적이 있다. https://mangkyu.tistory.com/ 언제부턴가 서비스를 종료 하셨고, 게시글도 내리신 상태이시다. 현재 나에게 필요한 서비스라서 직접 만들기로 했다. 만들기로 결심한 이유는 평소에 CS 지식을 탄탄하게 쌓아두고 준비를 잘 해두면, 기회가 왔을때 붙잡을 수 있는 확률이 높기 때문이다. 일정 2023.12.19 ~ 2023.02.29 기술 요구사항 Java21 Spring Boot 3.2.X Spring Data Jpa Spring Data Envers QueryDsl Spring Data Redis Flyway Spring Batch Mysql 서비스 제공에 백엔드 구현만으로 충분하다. 프론트까지 하기.. 프로젝트/기술면접 구독 서비스 2023. 12. 19. 이전 1 2 3 4 ··· 9 다음 반응형