본문 바로가기

Happyer16

(314)
디자인패턴8-전략 패턴/스트래티지 패턴(Strategy Pattern) 제목만 보면? 전략 패턴? 뭔가 전략이 자주 바뀌는 즉, 특정 행위가 바뀌는 상황에서 쓰면 좋은 패턴인 것 같다. 일을 하는 방식, 비즈니스 규칙, 문제를 해결하려는 알고리즘을 쉽게 바꿔주기 위한 규칙인 것 같다 요구 사항 여러가지 로봇이 있는데 각자 공격 방식과 이동 방식이 다르다. 이를 모델링 해달라! 기존의 나였다면? 나름 부모 클래스를 만들어서 move(), attack() 함수를 정의하고 구체적인 구현은 자식 클래스에게 맡겼을 것이다. 나의 개발 완벽하니? Atom과 TaekwonV는 move() 방식이 같은데 코드가 중복! ( 나중에 걷는 방식이 구체화되고 수정해야 된다면 2번 수정! ) 새로운 로봇을 구현하는데 move()나 attack() 방식이 같은 경우도 중복 발생! Atom을 걷는 방..
11번가 Spring Cloud 기반 MSA로의 전환 - 발표정리 11번가 Monolitic일때 상황 ( 16년 말 ) 공통 모듈만 200만 라인 빠르고 다양한 비즈니스 발전으로 인한 if문 추가추가..... 코드 양이 많다보니 IDE에 띄우는것도 힘들다 새로운 기술 접하기가 힘들다 ( dependency가 엉켜있으니까 ) 많은 개발자가 한번에 배포해야 함 잘 돌아가는데 MSA 가야하나? 나의 과감한 수정은 전사 장애다 => 개발 조직에 좋지 않은 문화 어떻게 MSA를 도입할 것인가? 업무 도메인별 ( 또는 더 자세하게 ) 별로 서버 분리 Legacy 코드에서는 새로운 API 서버 호출 DB Flag를 통해서 기존코드와 새로운 코드 switchable하게 해서 안정성 확보 어떤 솔루션을 사용할 것인가? NETFLIX OSS => Spring Cloud를 사용 Hystr..
9.3. 스프링 웹 애플리케이션 아키텍처에 관하여 들어가기 전 스프링 프로젝트를 하면, 일단 기본적으로 생각없이 Controller, Service, Repository 3단계로 나누어 코딩을 한다. 어떤 역할로 나눈지는 이해하고 있었지만, 어떻게 서로 결합도를 낮추고, 어떠한 방식으로 아키텍처를 정하는지에 대한 이해도는 거의 없었다. 그래서 토비의 스프링에 있는 9.3. 애플리케이션 아키텍처를 읽게 되었다. 계층형 아키텍처 우리는 스프링을 공부하면서 관심, 책임, 성격, 변하는 이유와 방식이 서로 다른것들을 분리함으로써 결합도는 낮추고 응집도는 높이는 코드를 만들어 왔다. 웹 애플리케이션에서도 이처럼 성격이 다른 것은 아키텍처 레벨에서 분리해주는 것이 좋다. 만약, 분리하지 않고 JSP 처럼 HTML, JDBC 코드가 함께 존재한다면? 유지보수는 거의..
Spring Security 아키텍쳐 Spring Security에 관하여 Spring security에 대한 깊은 이해없이 사용하였다. 그래서 Spring security 공식 문서를 읽고 기초를 다지려 하였다. Spring security를 사용해봐서 알겠지만, 우리가 필요한 부분만 작성할 수 있도록 구조를 잘 짜놓았다. 유연하면서 다양한 authentication과 authorization을 제공한다. (나도 코드를 작성할 때 Spring Security 구조처럼 OCP를 지키도록 해야지...) secure application이 어떻게 동작하는지? 어떻게 커스터마이징하는지? application의 보안에 대한 고민이 필요할 때 사실 spring boot에서 워낙 auto configuration이 잘 되어 있어서 해당 문서를 읽지 않..
Spring boot 2.0에 관하여 Spring boot 2.0 뭐가 좋음? 1. Reactive 프로그래밍을 지원함 ( non-blocking ) - 애플리케이션 확장할 때 조금의 thread만을 필요하도록 해준다. - Spring WebFlux에 대한 auto-configuration이 들어감 - Embedded server를 netty로 사용할 수 있음 2. 1.0에 만들었던 것들을 리팩토링 참고 : https://www.infoq.com/news/2018/03/spring-boot-2.0-release-ga-webb
스프링 CORS Cross-origin resource sharing(CORS) : W3C 스펙이고 대부분 브라우저에서 지원한다. WIKI를 보면 다음과 같이 정의 되어 있다. Spring Boot에서는 @CrossOrigin 어노테이션을 쓰면 CORS를 지원한다. addCorsMapping을 하면 global CORS를 설정할 수 있다. ( 컨트롤러 별로 CORS를 설정하는게 아니라 전체 설정 )
스프링 5 - PushBuilder란 Servlet 4에서 추가된 PushBuilder를 Spring5부터 지원을 합니다. HTTP2 서버 푸시 기능에 대해 살펴보겠습니다. 기존 예제 단순히 html 페이지에서 css, js를 로딩하는 예제이다. 첫 호출 두번째 호출 왜 로딩속도가 더 빨라졌을까? cache 때문? 하지만 Disable cache를 설정해놨기 떄문에 아니다. 두번째가 더 빠른 이유는 Servlet의 라이플사이클과 관련이 있다. 처음 호출할 때 Servlet을 초기화 하기 때문에 상대적으로 느린 것이다. HTTP2를 사용한 예제 yml에 해당 코드를 추가해주자. chrome 창을 보면 프로토콜이 h2로 바뀐것을 확인할 수 있다. 서버 푸쉬는 index 페이지를 볼 때 이 리소스를 필요로 할거야 예상하고 미리 보내주는 기능이다...
개발자 성장 팁 - 다른 개발자 코드 보기 이유 1. 사고의 폭이 넓어진다. 2. 경우에 따른 다양한 선택지가 생긴다 ( ex: collection loop도 방법이 많다 ) 3. 다양한 기능 학습 ( 같은 framework를 써도 여러가지 방법이 있음 ) 방법 1. 자신이 사용하는 framework의 예제코드를 보라 ( Spring PetClinic sample 앱 봐라 ) 2. 사내 코드리뷰 - 결론 : 혼자 개발해서는 좋은 개발자가 될 수 없다 출처 : https://www.youtube.com/watch?v=i3p0dQrIDNo
스프링 프록시 패턴 - Proxy Pattern Spring에서 나오는 개념 중 하나인 AOP를 공부하기 위해서는 Proxy Pattern을 앙아야 한다. 그래서 간단한 결제 예제를 공부하였다. 결제와 관련된 interface이다. 1) 현금 결제 구현체 2) 현금 결제 구현체에 다가 성능 측정 코드를 추가하고 싶은 경우 서비스를 사용하는 클라이언트 결제를 사용하는 클라이언트 측에서는 코드 변경이 일어나지 않는다. 단지 어떤 Payment를 사용할지만 알려주면 된다. 위의 예제는 자바 코드로 작성한 Proxy pattern이다. Spring에서 제공해주는 AOP를 이용하여 다음과 같은 코드를 더욱 더 쉽게 작성할 수 있다. 다음 포스팅에 작성해서 올리겠습니다! 참고 : https://en.wikipedia.org/wiki/Proxy_pattern
PSA에 관하여 Portable Service Abastraction 잘 만든 인터페이스 / 기술에 특화되어 있지 않은 코드를 얘기한다. 왜 좋은가? https://en.wikipedia.org/wiki/Service_abstraction Example - Servlet 작성 HttpServlet을 상속 받아서 doGet(), doPost() 함수 작성 & web.xml 설정 작성 @Controller - Spring Web MVC 추상화 계층 덕분에 편함 Spring Web MVC 추상화 계층 @Controller, @GetMapping을 이용해서 사용 1) 편안하다 : HttpServlet을 몰라도 됨, Mapping 편하게 할 수 있음 2) 특정 기술에 독립적 : Tomcat 기반으로 실행이 됨 Spring 5부터..