회고를 시작하며 2023년은 나에게 많은 일이 있던 해였다. 이룬것도 많았고 놓친것도 많았다. 말고 많고 탈도 많았던 2023년을 되돌아보자. 팀 이동 줌인터넷 재직 당시 다른 팀에서 진행하는 스터디에 합류해서 같이 공부해 보자는 제안을 받았다. 평소 다른 팀들과 친해질 수 있는 계기가 없기 때문에 좋은 기회라고 생각되어 가상 면접 사례로 배우는 대규모 시스템 설계 기초 라는 책을 같이 학습하였다. 단순히 책을 읽는 것으로 끝나지 않고, 각자 생각하는 설계를 화이트보드에 적어가면서 토론하는 방식으로 진행되었는데 새삼스레 다른 팀 문화를 느낄 수 있어 좋은 경험이었다. 스터디를 진행하던 도중 파트장님이 같이 근무해 보자는 제안을 먼저 해주셨고, 몇 차례의 면담 끝에 핀테크개발팀 에 합류하게 되었다. 사내에..
회고를 시작하며 2022년 하반기는 개인의 성장보다는 회사 업무에 집중했던 시기였다. 이직 후 회사 업무 프로세스에 적응이 필요하기도 했고 보상 심리가 생겨 나름대로 휴식도 많이 취했다. 스스로 만족스럽지 못한 2022년 하반기 회고를 시작해보자 파일럿 프로젝트 사내 신규 입사자들은 입사 후 파일럿 프로젝트를 진행하는 문화가 있다. 입사 시기에 맞춰 파일럿 프로젝트 과제를 준비해주셨고 내가 진행했던 과제는 기존 회원 구조를 통합 회원으로 개선하는 것이었다. 통합 회원을 간단하게 설명하면 하나의 계정이 여러 개의 소셜 아이디와 연동하는 것을 의미한다. 단기간에 기존 회원 구조를 파악하면서 개선하는 것은 생각보다 쉽지 않았다. 인수인계를 해주신 파트장님도 다른 파트에서 근무하고 계셨고, 회원 서비스 담당 기..
회고를 시작하며 올해를 맞이하며 처음으로 정했던 첫 목표는 회고 작성하기 였다. 자신을 아무리 잘 알고 있다고 해도 스스로 칭찬과 피드백을 글로 남긴다면 지속적인 성장에 도움을 줄 수 있으리라 생각했다. 2022년 상반기는 선택과 집중 이 필요한 시기였고 나에게 많은 변화가 있던 시간이었다. 시나브로 모르는 사이에 조금씩 조금씩 라는 의미를 가진 순우리말이다. 나는 올해의 키워드를 시나브로 로 정했다. 출퇴근 시간, 평일 저녁, 주말에 꾸준히 공부하는 습관을 길들였다. 이렇게 꾸준히 공부하는 습관은 시나브로 어느샌가 머릿속에 지식으로 축적되리라 생각했고 매일 공부하기 위해 노력하였다. 1일 1커밋 문화는 지속해서 공부하는 습관을 길들이기에 효과적이라고 생각한다. 시각적으로 재미도 있고, 공부한 내용을 p..
상수보다는 열거형을 사용하자 Enum Class 은 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미합니다. Enum Class 의 장점 Enum Class 는 완벽한 싱글톤이다 Thread-safety, Serialization 이 보장된다 기존 코드의 문제점 비즈니스 로직의 코드를 테스트도 만들어서 꼼꼼하게 점검했지만, 깔끔한 코드를 추구하는 스프링 사용자답게 만들어진 코드를 다시 한번 검토해보자. 코드에 중복된 부분은 없는가? 코드가 무엇을 하는 것인지 이해하기 불편하지 않은가? 코드가 자신이 있어야 할 자리에 있는가? 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가? 트랜잭션 트랜잭션 경계설정 데이터베이스는 그 자체로 완벽한 트랜잭션을 지원..
의존관계 주입 방법은 크게 4가지가 있습니다. 다양한 의존관계 주입 방법을 알아보고 최근 스프링에서 왜 생성자 주입 방식을 권장하는지 살펴보겠습니다. 수정자 주입 자바빈 프로퍼티 규약의 setter 메소드 방식을 사용하는 방법입니다. 선택, 변경 가능성이 있는 의존관계에 사용됩니다. @Component public class MemberService { private MemberRepository memberRepository; @Autowired public void setMemberRepository(MemberRepository memberRepository) { this.memberRepository = memberRepository; } public Member selectMember(Long ..
초난감 예외처리 초난감 예외처리 1 try { ... } catch(SQLException e){ }예외를 잡고는 아무것도 하지 않는 코드이다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어가겠다는 분명한 의도가 있는 게 아니라면 연습 중에도 절대 만들어서는 안 되는 코드다. 초난감 예외처리 2 } catch(SQLException e) { System.out.println(e); }초난감 예외처리 3 } catch(SQLException e) { e.printStackTrace(); }예외가 발생하면 화면에 출력해주는데 뭐가 문제일까? 운영서버로 올라가면 콘솔 로그를 누군가가 계속 모니터링하지 않는 한 이 예외 코드는 심각한 폭탄으로 남아 있을 것이다. 예외를 처리할 때 반드시 지..
확장에는 자유롭게 열려 있고 변경에는 굳게 닫혀 있다는 객체지향 설계 핵심 원칙인 개방 폐쇠 원칙 을 다시 한번 생각해보자. 이 원칙은 코드에서 어떤 부분은 변경을 통해 그 기능이 다양해지고 확장하려는 성질이 있고, 어떤 부분은 고정되어 있고 변하지 않으려는 성질이 있음을 말해준다. 다른 목적과 다른 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어주는 것이 바로 개방 폐쇠 원칙 이다. 템플릿이란 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭괴 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 기법이다. 템플릿 메소드 패턴의 적용 템플릿 메소드 패턴은 상속을 통해 기능을 확장해서 사용하..
우아한유스방 은 유쾌한 스프링방 이라는 카카오톡의 오픈채팅 단톡방에서 진행되는 프로그램이다. 과정은 총 5개의 과정으로 구성되어 있으며 매일 구성원들이 정해진 시간에 모여 공부하고 학습한 내용을 공유한다. 기다리던 첫 오리엔테이션에 참여하게 되었고, 느낀 후기를 간단하게 작성해본다. 나의 위치가 어디인가? 아래 순서로 공부한다고 하였을 때 나의 위치가 어디인지 파악하면 좋을 것 같아요 학습과 적용, 응용에 대한 태도 클린코드, 좋은 설계를 이끄는 단위 테스트 웹 기술과 웹 프로그래밍 스프링 프레임워크 데이터베이스 ORM 프레임워크 CI/CD를 위한 인프라 스트럭처 클린 아키텍처 DDD 분산 시스템 인프라 스트럭처 MSA .... 신입부터 현재까지 열심히 달려왔지만 나에게 많은 생각을 들게 해준 문장이었다..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dFoT3W/btrxVF3DvEE/OkX4iPQEr76cWyDxfwXORk/img.png)
스프링 기초를 공부하거나, 핵심 개념을 공부한다면 DI/IoC 는 빼놓을 수 없는 중요한 개념입니다. 객체지향 설계 원칙을 더욱 우아하게 지킬 수 있도록 도와주는 스프링의 3대 요소 중 하나인 DI/IoC 의 개념을 예제 코드와 함께 정리해보도록 하겠습니다. DI (의존관계 주입) 의존관계 먼저 의존관계란 무엇인지 생각해봅시다. 두 개의 클래스 또는 모듈이 의존관계에 있다고 말할 때는 누가 누구에게 의존하는 관계에 있다는 식이여야 합니다. UML 모델에서는 두 클래스의 의존관계를 다음과 같이 점선으로 된 화살표로 표현합니다. A가 B에 의존하고 있음을 나타낸다. 그렇다면 의존하고 있다는 건 무슨 의미일까? 의존한다는 건 의존대상, 여기서는 B가 변하면 그것이 A에 영향을 미친다는 뜻입니다. B의 기능이 ..
애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응하는 첫번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 만들어진 코드를 확신하게 할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이다. 웹을 통한 DAO 테스트 방법의 문제점 보통 웹 프로그램에서 사용하는 DAO의 테스트 하는 방법은 웹 화면을 띄워 폼을 열고, 값을 입력한 뒤 버튼을 눌러 등록한다. 이렇게 웹 화면을 통해 값을 입력하고, 기능을 수행하고, 결과를 확인하는 방법은 가장 흔히 쓰이는 방법이지만, DAO에 대한 테스트로서는 단점이 너무 많다. 그렇다면 테스트를 어떻게 만들어야 이런 문제를 피할 수 있고, 효율적으로 활용할 ..