분류 전체보기
넥스트스텝 - 계산기 리뷰
넥스트스텝 - 계산기 리뷰
2022.01.29프로젝트 구조 제출한 프로젝트 구조이다. 2주차인 지금 회고해 보니 common package 대신 utils package 를 쓰는것 그리고 view package 에서 InputView, OutputView 를 만들어서 관리해주는것이 좋지 않았을까 생각이 든다. 추가로 Validation 패키지를 관리하면 좋지 않을까 생각했다. 객체 ErrorMessage 상수 메시지에 대한 책임을 가지고 있다. 일관된 [ERROR] 표시가 맘에든다. UserInput 대충 보아도 UserInput에 부여되는 책임이 너무 많다. Parsing, Validation, SplitString, UserInput 이 주요 내용이다. 하나의 클래스에 하나의 책임을 부여하는것이 좋을것 같다. 만약, 변경한다면 아래를 클래스로 ..
git cherry-pick으로 rebase 완성하기
git cherry-pick으로 rebase 완성하기
2022.01.28문제의 시작은 Merge가 되기도 전에 다른 branch에서 작업을 하다가 Merge가 된 후에 기본 branch의 작업을 가져와야 했었다. 이것을 rebase로 해결한 사례이다. 우선 Merge와 Rebase의 차이는 아래와 같다. Rebase와 Merge의 차이점 Merge로 통합하기 이 두 브랜치를 합치는 가장 쉬운 방법은 merge 명령을 이용해 3-way Merge로 새로운 커밋을 만들어내는 것이다. 이 때 내부적으로 공통조상인 C2를 이용하게 된다. Rebase로 통합하기 두 브랜치가 나뉘어 있는 아까와 같은 상황에서 시작한다. 대강 여기서 rebase를 이용할 예정이다. 왜냐하면 커밋이 깔끔하기 때문에. 전체 흐름을 파악했다면 문제인 요소에 대해 디테일하게 접근해보자. 문제는 다음과 같다. ..
11번가 SW 통합 지원기
11번가 SW 통합 지원기
2021.12.30서류 (11월 11일) 합격한지 시간이 조금 지났지만, 11번가 SW 통합 최종 합격에 대한 후기를 작성해보려고 합니다. 11월 11일 11stcorp.com 기준으로 23:59분까지 서류를 마감하였습니다. 마감일에 작성하게 되면 여러 지원자들이 서류를 제출하기 때문에 사이트에 지연이 발생할 수 있습니다. 이점 유의해서 미리 작성하는것을 추천드립니다. 저는 공고를 보고 서류 나온 당일날 제출하였습니다. !자기소개서 Tip 자기소개서는 명확하게 설명할 수 있는 내용을 작성하는것이 좋습니다. 코딩테스트 (11월 13일) 서류 제출하고 11월 13일, 이틀후에 코딩테스트를 보았습니다. 코딩테스트는 크게 어렵지 않았습니다. 결과는 11월 24일 나왔습니다. 1차 면접 & 사전 과제 & 인성검사 (12월 2일) ..
centOS mirror
centOS mirror
2021.12.16mirror site = 네트워크 트래픽을 줄이기 위해 다른 컴퓨터 서버로 복사해놓은 웹사이트, 컴퓨터 파일 서버 mirror list = 위 mirror site 를 모아 놓은 list centOS에서 제공하는 미러리스트 서버는 http://mirror.centos.org/ 에서 확인할 수 있다. centOS를 사용하면 yum repository를 사용할 텐데 여러 구성요소가 존재하지만 baseURL의 기본 패키지 경로 설정 항목이 존재한다. 초기 설치시 레포지터리 설정은 mirrorlist를 참조하게 되므로, mirrorlist 구문 주석처리 후 Baseurl 란에 사용할 국내 Mirror서버 URL을 등록할 수 있다. mirror site 변경 하거나 사용하는 목적은 패키지 혹은 유틸리티를 받아오기..
Spring Security
Spring Security
2021.12.14스프링 시큐리티 JWT는 JSON 객체로 안전하게 전송하기 위해 사용한다. header, payload, signiture 구성을 갖는다. base64로 각각 인코딩에서 클라이언트에 돌려준다. 이는 데이터의 무결성을 보장하기 위해 base64로 사용한다. 디코딩해서 확인할 수 있다. 클라이언트가 서버에 요청을 할때 JWT가 신뢰할 수 있는 토큰인지 검증하는데 서버는 header, payload, signiture를 알고있다. JWT가 유효한지 검증하는데 header랑 payload 그리고 서버가 가지고 있는 secret key를 가지고 HMACSHA 256으로 암호화해서 (직접 할 필요는 없다. 스프링 시큐리티에 관련 라이브러리가 존재한다.) 이 값을 클라이언트에 요청한것과 같으면(서명된 부분) 이전에 ..
빈 생명주기 & 콜백
빈 생명주기 & 콜백
2021.12.14빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 여기서 초기화 작업은 의존 관계 주입이 모두 완료되고 나서 호출이 되어야 한다. 개발자는 이 호출 시점을 알고 있어야 한다. 어떻게 파악할 수 있을까? 스프링에서는 의존 관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공해준다. 스프링 빈의 이벤트 라이프사이클은 아래와 같다. 생성 > 스프링 빈 생성 > 의존관계 주입 > 초기화 콜백 사용 > 소멸전 콜백 스프링 종료 초기화 콜백을 사용하는것은 빈이 생성되고 빈의 의존관계 주입이 완료..
의존관계 자동 주입
의존관계 자동 주입
2021.12.13의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입, 수정자 주입(setter 주입), 필드 주입, 일반 메서드 주입 생성자 주입은 생성자 호출 시점에 딱 1번만 호출된다. 불변하다. 이와 대비되게 set으로 열어두면 변경사항이 발생하기 때문에 버그각 발생할 가능성이 있다. 생성자가 1개 일 경우 @Autowired를 생략해도 자동 주입 된다. Test 코드 작성 시 등록된 클래스 구체 타입을 AnnotationConfigApplicationContext에다 넘겨주고 getBean 으로 빈을 꺼내온 후에 테스트하고자 하는 구체 타입과 똑같은지 비교하게 된다. 선택적으로 변경 가능성이 있는 의존관계에서는 주입할때 @Autowired(required=false) 를 적용할 수 있다. 자바빈 프로퍼티 규약..
컴포넌트 스캔
컴포넌트 스캔
2021.12.12컴포넌트 스캔 등록해야 하는 @Bean이 많아지면 프로그래머는 굉장히 힘들것이다. 누락될 수도 있고 자동으로 @Bean을 등록해주는 @ComponentScan 기능이 있다. 이런 경우 보통 클래스를 @Component으로 등록하고 각 메소드에 대한 의존관계를 위해 @Autowired를 등록해준다. @ComponentScan을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록된다. 그래서 이러한 의존관계 중 일부를 제외하고 싶다면 excludFilters를 사용해서 컴포넌트 스캔 대상에서 제외시킨다. @ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다 package hello.core; import org.springframework.con..
싱글톤 컨테이너
싱글톤 컨테이너
2021.12.12웹 애플리케이션과 싱글톤 트래픽이 들어왔을 때 같은 리소스를 여러 트래픽에서 호출하면 각각에 대해 객체가 생성될것이다. TPS가 커질 수록 문제가 발생한다. 순수 자바 코드의 경우 DI 컨테이너인 AppConfig는 요청할 때마다 객체를 새로 생성한다. 이런 경우 메모리의 낭비가 굉장히 심해진다. 그래서 고안된것이 싱글톤 패턴이다. private static final SingletonService instance = new SingletonService(); 그런데, 위와 같이 코드를 작성하면 어떤 문제가 발생할까? 보통 생성된 싱글톤을 호출하게 되면 .getInstance()를 쓰게 된다. getInstance()를 쓰게 되면 클라이언트는 구체 클래스 getInstance()에 의존하게 된다. 이는 ..
Netflix OSS 이야기
Netflix OSS 이야기
2021.12.10Hystrix Hystrix는 마이크로서비스의 전류차단기(Circuit Breaker) 역할을 하는 오픈소스 문제가 있는 마이크로서비스로의 트래픽을 차단하여 전체서비스가 느려지거나 중단되는것을 미리 방지 Hystrix Command 호출할 때 발생하는 일 Exception 한 경우 Fallback 처리 한다. 메소드 종료가 되지 않으면 504 Timeout Gateway 발생 Hystrix - Circuit Breaker 일정 비율로 에러가 발생하면 Circuit Open 한다. Circuit Open은 메소드 호출함에도 메서지 바디 내용을 누군가 인터셉터해서 Exception으로 처리해버린다. 운영관점에서 여러 서버를 운영하는데 하나의 서버가 장애가 발생하면 나머지 서버도 사용하지 못할 정도로 리소스를..
객체 지향 원리 적용
객체 지향 원리 적용
2021.12.10애자일 소프트웨어에 인상적인 글귀 - "계획에 따르기 보다는 변화에 대응하기를" Mac 기준으로 Method쪽에 CMD+SHIFT+T 를 누르면 Test 코드를 작성할 수 있다. Test 코드 작성 시 꿀팁은 given, when, then given 에 객체를 만들어주고 when 에 테스트 로직을 추가하고 then 에서 마지막으로 검증해준다. Test 코드에서 고려해야할 것은 성공, 실패 코드 두가지 이다. class RateDiscountPolicyTest { RateDiscountPolicy discountPolicy = new RateDiscountPolicy(); @Test @DisplayName("VIP는 10% 할인이 적용되어야 한다.") void vip_o() { //given Member..
Spring 예제
Spring 예제
2021.12.10Spring Spring build 할 때 프로퍼티에서 gradle보다 intellij를 쓰는것이 더 빠르다. Client에서 회원서비스를 통해 인터페이스에서 회원 저장소오아 연동될 DB를 구현한다. 예를들어서, MemberService 인터페이스를 구성하고 구현체로 MemberServiceImpl을 구현한다. 개발자가 구체적인 클래스 다이어그램을 구현한다. Spring에서 프로그래밍 처리하다보면 동시성 이슈가 생길 수 있기 때문에 Concurrent 를 고려해야한다. 아래 코드를 확인해보면 MemberRepository는 인터페이스이고 실제 구현은 MemoryMemberRepository에서 수행한다. 여기서 구현체가 존재하지 않는다면 NullPointException이 발생한다. private fin..