백문이불여일타

백번보는것보다 한번코딩하는게 낫다

카오스몽키로 런타임환경에서 어플리케이션 장애 주입하기

배경 “송금 API 오류 났을때 화면을 보고 싶은데 어떻게 해요?” “타임아웃 났을때 서비스가 어떻게 되는지 보고 싶은데 어떻게 해요?” 이런 요구사항을 받았을때, 생각나는건 특정 파라미터 하드코딩하여 if문을 추가하거나 prfofile 환경이 개발용 운영용 클래스를 분리하는 방법으로 했었다. 이러한 방식은 코드를 직접건들기에 나이스하지 않다고 생각했......

Mac에서도 Window 에서도 도커로 동일한 Mysql DB 환경 만들기

Docker로 난 무얼 하고 싶었나?? 환경에 제약 없이 개발 DB를 구성하고 싶었다. 환경이라 함은 Window든 Mac이든 내컴퓨터든 다른 사람 컴퓨터든 말이다. Mac PC에서 공부한 내용을 Github에 올리고 집 Window PC에서도 Github에서 소스를 받아서 하면됬다. 근데, DB는?? 내가 저장한 데이터 DB 컨텍스트 정보는 환경이......

IoC, DI란 무엇일까

Why? Spring 에서 DI를 잘 썼다고 하는데 어느부분에서 잘썼는지 구체적인 사례를 찾아보자 목표 Spring IoC, DI가 무엇인지 이해시킨다. Spring DI에 장단점을 이해시킨다. Bean이란 무엇이고 Container에서 어떻게 관리되고 생명주기는 어떻게 되는지 이해시킨다. IoC (Inversion of Control) 란 무......

서버가 여러대 있때 redirect 사용시 발생하는 문제

왜 alert 메시지가 안보이지? (Rdierect에 위험성) 기획자, QA와 남은 항목에 대해서 회의하고 차주 월요일날에 서비스 오픈이 예정되어 있었다. 퇴근 30분전 크게 문제 될 상황은 없었고 내가 개발한 회원 탈퇴에 대한 테스트를 해봐야 겠다??? 너무 늦은감은 있지만 QA에서도 통과 되었었고 이상없겠지 하고 안하고 있었다… 자 해보자 했는데 ......

첫 서비스 오픈 준비를 하며

들어가며 첫 서비르 오픈 준비를 하고 부족한 부분을 보안 할 점, 문제 해결 상황, 경험 등을 기억하고 기록하여 다음에는 더 개선된 행동을 하기 위해 적어 놓는다. 부하테스트 통과 시키기 서비스를 오픈하기전에 부하테스트를 하여 서버에 어떤 영향이 있을지 모르니 사전에 알기 위함이고 앞으로 팀내 서비스를 출시 할 때 부하테스트 스템을 추가하여 표준적인 ......

객체지향 캡슐화 그것이 알고 싶다.

캡슐화란? 변경 될 수 있는 것은 어떤 것이라도 감춘다. 반사적으로 생각나는 단어는 “변경” 입니다. 다시 말해 캡슐화를 잘 되어 있는 설계 일수록 응집도는 높고 결합도는 낮습니다. 각 객체들은 스스로 역활과 책임을 충실히 하기 때문에 기능이 변경되어도 수정 할 수 있는 부분은 최소한으로 할 수 있습니다. 즉, 캡슐화란 변경 될 수 있는 부분은 최......

상속보다는 합성을 사용해야 하는 이유

들어가며 상속은 막연히 부모 자식 관계 합성은 Setter 메소드 처럼 객체를 주입받는 패턴 정도만 알고 있었는데 “오브젝트 - 조영호” 책을 읽으면서 내용을 학습하여 이해하고자 정리 합니다. 그러면 먼저 상속과 합성이 무엇인지 부터 제가 깨닳은 내용을 공유해 드리죠 왜 상속보단 합성을 써야 할 까? 공통 역활을 수행하는 부모 클래스를 두고 부모 기능......

객체 설계 할 때 데이터 중심이 아닌 책임 중심으로 해야 하는 이유

추상화, 결합도, 응집도를 잘 활용해야 변경에 유연해 진다.

왜 OOP를 할 때 데이터 중심으로 하면 안될까?? 데이터는 구현이다. 여기서 말하는 구현은 객체의 상태값이 될수도 있고 객체가 수행하는 로직이 될 수 도 있다. 즉, 객체 내부에서만 접근 가능한 것들이다. 구현은 얼마든지 변경이 생길수 있기 때문에 데이터 중심으로 객체간 협력을 하게 되면 변경에 취약하게 된다. 책임은 인터페이스다. 책임 중심으로 이......

JPA 영속성 컨텍스트 엔티티 관리 방법

학습목표 영속성 컨텍스트가 엔티티를 생성,수정,삭제 하는 동작을 파악하여 실무 개발할때 삽질을 줄이고 불필요한 쿼리를 발생시키지 않게 한다. JPA를 활용하여 성능향상을 시킨다. 들어가며 관련 샘플 코드는 Github에 있습니다. 영속성 컨텍스트에 대한 엔티티 관리를 다양한 예제를 만들어보고 피드백을 받아 앞으로 계속 업데이트를 하도록 하겠습니다.......

JPA 커스텀 리파지토리 만드는 방법

학습목표 JPA 커스텀 리파지토리 만드는 방법을 알고 실무에 적절한 상황에 적용하여 생산성과 유지보수 향상을 도모한다. 들어가며 해당 설명에 대한 코드는 Github 에 있습니다. 내용은 차근 차근 업데이트 하고 살을 붙여 나가도록 하겠습니다. 커스텀 리파지토리를 왜 만드는가? Hibernate, Spring Data 제공하는 기능 외 내가 필요한......

JPA 쿼리에 대해서

학습목표 JPA 쿼리를 왜 사용하는지 이해한다. JPA 쿼리 종류가 어떤것이 있으며 각 장/단점을 각 상황에 따라 실무에 적용 할 줄 안다. JPA 쿼리!?!? 쿼리를 안써도 되는 줄 알았는데?? JPA를 공부하면서 가장 큰 착각 중에 하나였다. 아직도 의문점이 드는게 있고 완벽하진 않지만 하나하나 궁금증을 해결해 가면서 지식을 내것으로 만들어 보......

N+1 문제 해결 방법

예제 Repository 류윤광 Github 학습목표 N+1 문제가 무엇인지 안다. 그것을 해결하기 위한 방법이 어떤것이 있으면 각 방법에 장단점을 안다. 실무에 정확히 적용 할 줄 안다. 우선 junit에 테스트 한다면 아래 사항을 주의 하자 junit은 기본적으로 테스트가 끝나면 rollback 되므로 그 영향으로 JPA에 영속성 컨텍스트에서......

팩토리 패턴, 도대체 왜 쓰는거야? - 기본 이론편

속 시원히 알게 되는 팩토리 패턴 개념

결론부터 말하자면… 객체 생성 하는 코드를 분리하여 클라이언트 코드와 결합도(의존성)를 낮추어 코드를 건드리는 횟수를 최소화 하기 위한 패턴이다. 자, 용어부터 이해하자 그래야 전체적으로 이해가 되니까 여기서 클라이언트 코드는 분리시킨 객체 생성 코드를 호출하는 쪽을 말한다. 결합도는 왜 낮아 지는가? 그것은 객체지향 성질중에 하나인 다형성을 이용 하......

객체 지향 설계 5대 원칙 - SOLID

OOP를 올바르게 설계 하는 방법

SOLID 란? 객체지향이 탄생이후 50년 동안 수많은 시행착오 속에 태어난 5가지 원칙을 Robert C. Martin 이 2000년대 초반 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙으로 제시한 것을 Michael Feathers 가 앞글자만 따서 소개한 것이다. SRP(Single Responsibility Principle) 단일 책......

템플릿 메소드 패턴, 도대체 왜 쓰는거야? - 기본 이론편

템플릿 메소드 패턴 파헤치기

템플릿 메소드 패턴이란? 메소드 안에 규격화된 로직 또는 단계를 정의해놓고 그 규격화된 단계를 바탕으로 로직을 구현하는 패턴이며 포괄하고 있는 메서드를 템플릿 메서드라 한다. 일부 단계에서는 서브클래스에서 입맛에 맞게 로직을 구현하되 전체적인 템플릿(틀, 규격화된 로직)은 그대로 유지된다. 언제 사용할까? 예를 들어보자 토니스타크가 아이언맨 슈트를 자......

REST API에 대해서

REST API 내가 이해한 바탕으로 나만의 언어로 해석하자면 API 만 봐도 Client입장에서 정보를 이해 할 수 있고 활용 할 수 있어야 한다는 것이다. 즉, 클라이언트가 웹이든 앱이든 그 외 수단이든 Fielding이 말하는 REST 아키텍처를 따른 API 는 API 그 자체만으로도 충분히 판단, 활용 가능한 정보이므로 서버, 다양한 클라이언......
API

옵저버 패턴, 도대체 왜 쓰는거야? - 기본 이론편

옵저버 패턴 파헤치기

옵저버 패턴이란? 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정희 - 헤드퍼스트 참고 언제 사용할까? 내가 만든 예제 (구독자에게 미세먼지 전달 하기) Publisher, Observer 가 핵심이다. 각 역활은 아래와 같다. Observer 123public i......

팩토리 패턴, 도대체 왜 쓰는거야? - 실전 적용편

팩토리 패턴 파헤치기

왜 팩토리 패턴을 적용했는가? 스케줄링 되는 배치를 개발 중이었다. 기존 배치(General)가 주기적으로 Source DB에 데이터를 이관하고 있었다. 이후 추가 배치를 개발 해야 되는 상황이 왔다. 언제나 그랬듯이 항상 수정 및 추가 개발 건이 생긴다. 추가로 배치를 개발 해야 하는 것은 데이터 무결성을 체크하는 비교 배치, 적재 실패된 데이터를 ......

2019.02 회고

간소화 하기 하루에 투자 할 시간은 한정적이다. 알차게 시간 보내기 위해서 지금 당장 해야 할 것부터 하자. 하루 점수 메기는 것보다 실천할것을 먼저하자 영어 생활화 영어를 생활화 하지 않으면 절대 영어 실력이 늘지 않는다. 영어 이력서 영어 커밋 메세지 영어 문법 공부 말하고 싶은 문장 말하기 쉐도잉 꾸준히 하자 코딩문제 비중있게 중요하다 시간 ......

2019년도 첫 실천 1월 회고

1월 실천 성적표

1월 실천 성적표 드디어 2019년도! 나의 실천 1월 첫 성적표이다. 깃텁 TIL 에서 작성한 하루 해야 할 체크리스트 수행 함에 따라 하루 점수를 매겨 100점 만점으로 환산하여 나타낸것이다. (Github에 contribution을 따라해봤다.) 일단 위 색깔 음영과 같이 대부분 해야할 것을 미루지 않고 실천하였다. 정말 하기 싫은날에......

2018년 회고 - 시행착오

Overview 시행착오가 참 많았던 2018년 이었다. 다른 개발자 블로그를 많이 보면서 회고에 필요성을 느껴 처음 2018년도 회고를 작성해 본다. 목차 2018년 나의 키워드 습관 멀티 스레드 본질, 프로그래머 본질적 능력, 역량 습관 만들기 독서 나의 계획 실천 프레임워크 개발 자취 매일 알고리즘 문제 풀기 패스트캠퍼스 컴퓨......

개발자 논리적인 사고력에 대해서

문제해결과 알고리즘 책을 읽고

들어가며 컴퓨팅사고력 향상을 위한 문제해결과 알고리즘에 대한 책을 읽으면서 개발자에 필수 역략인 문제해결 능력, 논리력, 절차적 사고력에 관한 정의와 개념이 잘되어 있어 내용을 정리하여 머릿속에 넣고 싶어 포스팅을 시작해 본다. 문제란? 현재 상태의 변화로 인해 본인이 원하는 방향의 목표 상태가 생기는 것을 의미 여려 요인에 의해서 이루어야(해결해......

내가 작성한 코드가 메모리에서 어떻게 실행 될까

들어가며 자바는 인터프리터로 해석하기도 하고 한꺼번에 컴파일해서 실행하기도 하지만 핵심은 코드가 메모리에서 어떻게 동작하는지 정리해본다. 목표 Java 코드가 OS에게 할당받은 JVM위 메모리 영역에서 어떻게 움직이는지 확실하게 다른 사람을 이해시켜보자 우선, 아래와 같은 코드가 있다고 하자 이 상태에서 JVM이 실행되면 어떻게 될까? JVM이 OS......
CS

개발자 어떻게 공부 해야 할까

선배 개발자님들에 조언 정리와 나의 생각

작성 동기 개발자 어떻게 공부 해야 할까? 그 대답을 찾기위해 고민하고 스스롭 방법을 정립을 머릿속으로만 하였다. “개발자 공부” 에 대한 선배 개발자님들에 영감을 얻고 내 나름데로 생각을 정리하고 방법을 정립하기 위해 작성해 본다. 먼저 영감을준 선배 개발자님들에 조언 정리 개발자의 평생 공부 | 임백준 보러가기 개발자는 어떻게 성장해야 할까? |......

새로운 개념 어떻게 습득해야 할까

새로운 개념 습득 어떻게? 소프트웨어 개발자로 살고 있는 나는 홍수같이 터져 나오는 많은 기술들에 대해서 다 알아둬야 할 것 같아서 허덕거렸다. 이 많은 것을 언제 다 배우지? 그것은 중압감과 압박감으로 스트레스로 이루어 졌고 일하면서 알게된 지식들 정리하기도 벅찬데 육아하면서 새로운 개념은 언제 습득 할까… 하지만 다른 개발들에 생각들을 웹에서 접하......

Quartz를 활용한 실시간 배치 동적 스케줄러 사용기

어떤 시스템인가 DB 접속하여 데이터를 실시간 주기로 데이터를 targetDB에 적재하는 스케줄러 배치 모듈 서버 중단 없이 스케줄 주기 동적 변경 서버 중단 없이 이관 DB 추가 하여 스케줄 배치 수행 이관해야 하는 DB 접속수가 늘어나도 각각 스케쥴 배치 수행 기본적 서버 이중화 이지만 서버가 늘어나도 서버별 스케줄 배치 수행 (서버 클러스터링)......

Spring AOP 적용시 주의사항

기반개념 1.Componet Scan 2.Root-context, servlet-context 3.Spring AOP 방식 현상 1.point cut excution 패턴 적용 하였지만 특정 패키지에서만 동작이 되고 Scheduled 사용된 클래스에서는 AOP 적용, 즉 트랜잭션 rollback이 안됨 2.exception 발생시 catch 문에서......

Spring Validation 다양한 처리 방법

org.springframework.validation 활용 1234567891011@PostMapping(value = "/leave")public String applyLeave(@ModelAttribute @Valid RequestDto dto, Errors erros, RedirectAttribute......