면접에서 아래 코드에 대한 구조 리뷰를 요청 받았습니다. @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..
안녕하세요. 소프 입니다. 제가 퇴사 회고를 작성할 줄은 꿈에도 몰랐네요..신입으로 입사해 만 3년째 다닌 회사를 오늘부로 마지막 출근을 하였습니다. 퇴사를 결정하게 된 키워드는 '커리어 발전', '재미'였습니다.이유는 다음과 같습니다.💡커리어 발전을 위한 도전최근 스스로가 컴포트 존에 머물러 있다는 생각이 들었습니다. 어제보다 나은 오늘이 되기 위해서는 안락한 환경에서 벗어나야 한다는 결심을 하게 되었습니다. 4년 차에 접어든 지금이 커리어 발전을 위한 새로운 도전을 시작하기에 가장 적절한 시점이라고 판단했습니다.다양한 비즈니스를 경험하고, 폭넓은 동료들과 소통하며 성장함으로써 탄탄하고 균형 잡힌 커리어를 쌓아가고 싶다는 목표가 생겼습니다. 💡 사라진 개발의 재미, 그리고 되찾기 위한 고민개발이 취..
현재 다니고 있는 회사의 전체 개발팀에 CI/CD가 구축되어 있지 않습니다. 진행중인 SI 프로젝트에서는 고객사의 인프라 팀이 Jenkins와 AWS를 활용해 배포 시스템을 구축해주어 배포를 편리하게 진행할 수 있었습니다. 그러나 내부 프로젝트는 FTP를 통해 JAR 파일을 수동으로 업로드하고, 쉘 스크립트로 애플리케이션의 시작, 정지, 재시작 과정으로 배포를 하고 있습니다. 개발 과정에서 빈번한 수정으로 인해 주기적인 배포가 필요했습니다. 이를 위해 아직 커밋하지 않은 코드는 stash에 저장한 뒤, 수동으로 JAR 파일을 빌드하고 배포하는 작업을 최소화하기 위해 CI/CD 시스템 구축을 추진하였습니다. 내부 프로젝트는 IDC 서버를 사용중이었습니다. 제한사항은 다른 고객사에서 임대한 서버를 사용하고 ..
과정이 2월 29일에서 일주일 연장되어 3월 6일날 모든 미션을 수료하였다. TDD 과정을 수료하고 배운걸 까먹지 않고 복리의 효과를 보기 위해 ATDD까지 수강 신청을 하였는데 정말 잘한것 같다. TDD 때는 잠을 줄이면서 까지 미션을 진행했는데 그 효과때문인지는 몰라도 ATDD 때는 잠은 푹자면서 미션을 진행했다. (그래도 힘들긴 했다 ㅎ) 어떻게 구현해야하나 고민을 하면서 고통을 느낄 때 마다 내가 성장하고 있구나!! 라고 위안을 삼았다. 이제는 테스트 코드에 많이 익숙해 졌다. 단위 테스트는 통과 했지만 막상 인수 테스트는 통과하지 못한 경우를 몸소 느끼면서 인수 테스트가 방어막 역할을 톡톡히 해주는구나 라고 느꼈다. 이번 과정에서도 다시 한번 객체지향적인 코드와 의존성을 고려한 설계에 대해서 많..
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..
Step1 경로 조회 타입 추가Step1 경로 조회 타입 추가 PR package src/main/java/nextstep/subway/strategy/PathType.javaimport nextstep.subway.controller.dto.PathResponse;import nextstep.subway.controller.dto.StationResponse;public enum PathType { DISTANCE(Section::distance, (stations, value) -> PathResponse.distanceOf(StationResponse.listOf(stations), value)), DURATION(Section::duration, (stations, value) -> P..
Step1 즐겨찾기 기능 완성Step1 즐겨찾기 기능 완성 PR 3주차 미션을 시작하면서 한가지 깨달은 사항이 있었다. 2주차 까지는 restassured 요청시 공통 코드를 http method 기준으로 분리하였다. // AcceptanceTest protected ExtractableResponse get(String path, int statusCode, Map queryParams, Object... pathParams) { RequestSpecification requestSpecification = RestAssured.given().log().all(); if (queryParams != null && !queryParams.isEmpty()) { ..
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..
Step1 지하철역 인수 테스트 작성 Step1 지하철역 인수 테스트 작성 PR 미션은 총 4주차까지 있고 지하철 시스템이란 도메인을 주제로 점진적으로 발전시켜 나가면서 ATDD와 TDD를 배운다. 1주차 Step1은 RestAssured를 사용하여 지하철역 목록 조회와 삭제 API 총 2개의 테스트 코드를 작성하는 미션이다. 구현하는데 크게 어려움은 없었다. assertThat(stationsNames).hasSize(1) .containsOnly("강남역"); 지하철역의 리스트를 검증하는 부분에서 containsOnly를 사용했다. 아래와 같은 피드백을 받았다. 💡 containsExactly() 메서드를 활용해 보셔도 좋을 것 같아요 containsOnly는 순서와 중복을 고려하지 않고 명시된 값이..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.