목록전체 (129)
지나공 : 지식을 나누는 공간
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bhybyc/btq6BELeD5m/NSXQWsk2826Z3PGqteUDwk/img.png)
JPA란? Java Persistence API. 자바 진영의 ORM 기술에 대한 API 표준 명세. 아, ORM을 설명하자면 Object-Relational Mapping으로, 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계했을 때 이 둘 사이를 ORM 프레임워크가 중간에서 매핑하는 것이다. JPA는 아래와 같은 특징이 있는데 자세한 건 아래에서 다루겠다. 1차 캐시와 동일성 보장 -> 동일한 트랜잭션에서 같은 엔티티에 대한 두 번의 조회를 하나의 SQL문으로 수행해서 캐싱을 함. 지연로딩과 즉시로딩을 지원해 JOIN으로 연관객체를 같이 조회할 수 있다. 생산성에 도움이 된다. *Hibernate란? JPA 구현체. ORM 프레임워크 중 하나다. SQL문을 직접 작성하지 않고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dDE3HO/btq6Hi7M3aq/rDHQahIkljHoBTeOCB0W70/img.png)
스프링 IoC 컨테이너가 빈을 등록하는 원리는? 스프링은 개발자가 직접 만든 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존 관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 컴포넌트 스캔을 통한 자동 빈 등록 외에도 직접 빈을 등록할 수도 있다. 1. 컴포넌트 스캔 (자동 의존관계 주입) 2. 직접 빈 등록 - xml 또는 설정 파일 용도의 클래스를 생성하여 @Configuration을 붙이고 직접 등록할 메소드에 @Bean을 명시해서 할 수 있음. @SrpingBootApplication안에 @ComponentScan이 있고, 이 어노테이션은 여기서부터 모든 하위 패키지의 클래스를 훓으면서 @Component가 붙은 애들을 찾아 빈으로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zfgpS/btq6CCE9B3H/ckvr2YUqJuyeK8F2t1Pem0/img.png)
대표 질문은 형광펜 표시했습니다. 한 질문에 대해 파생된 꼬리질문이 많아서, 구분선을 그렸습니다. 객체지향설계의 원칙은? SRP(Single Responsibility Principle) 단일책임 원칙 한 클래스는 하나의 책임만 가진다. 변경이 있을 때 파급효과가 적으면, 다른 곳에 영향을 덜 미치면 단일책임원칙을 잘 따른것임. OCP(Open/closed principle) 개방폐쇄원칙 SW 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 확장을 하려면 당연히 기존 코드를 변경하는 것 같지만!!! 다형성을 떠올리자. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하잖아? 그런데 문제점이 있다. 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다는 것이다. 그래서 이걸 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dhGSP5/btq6fPmtIk7/r2ZSkoQIxqkHEQqHerKrt0/img.jpg)
지금까지의 흐름, 객체 지향 설계 원칙을 따를 때 의존성 주입이 왜 필요했는지 정리해보자. 지금까지의 흐름과 DI의 필요성 1. 새로운 할인 정책 개발 다형성 덕분에 새로운 정률 할인 정책 코드를 추가로 개발하는 것까진 문제가 없다. 2. 새로 만들어진 정률 할인 정책을 적용할 때 문제 발생 새로 개발한 정률 할인 정책을 적용하려고 했더니, 클라이언트 코드인 주문 서비스 구현체 (OrderSerivceImpl)의 코드도 같이 변경해야 했다. 왜냐면 여기서 직접적으로 DiscountPolicy를 FixDiscountPolicy로 구현하고 있었기 때문이다. 얘를 RateDiscountPolicy로 변경하는 순간 DIP 위반이라는 문제가 발생한다. 3. 관심사의 분리 애플리케이션을 하나의 공연으로 생각하자. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dOMMuh/btq6fTO2ntO/ww1g3i2zDdAYt1unHsXpSk/img.jpg)
김영한 님의 강의를 참고했습니다. 객체지향설계의 원칙은? SRP(Single Responsibility Principle) 단일책임 원칙 한 클래스는 하나의 책임만 가진다. 변경이 있을 때 파급효과가 적으면, 다른 곳에 영향을 덜 미치면 단일책임원칙을 잘 따른것임. OCP(Open/closed principle) 개방폐쇄원칙 SW 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 확장을 하려면 당연히 기존 코드를 변경하는 것 같지만!!! 다형성을 떠올리자. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하잖아? 그런데 문제점이 있다. 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다는 것이다. 그래서 이걸 해결해야 한다. 객체를 생성하고 관계를 맺어주는 별도의 조립, 설..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c1UEZY/btq5uHaV27I/sYDBR4bv078ktXbmdz3Rr0/img.png)
자주 나오는 질문이라고 들은 건 형광펜 표시했습니다. 대답에 꼭 들어가야 하는 키워드는 컬러펜 표시했습니다. 1번 질문에 대한 꼬리질문은 1-1, 1-2와 같이 정리합니다. Q. HTTP 특징과 쿠키,세션 사용 이유: HTTP 프로토콜의 약점을 보완하기 위해 쿠키와 세션을 사용한다. 1. Connectionless 프로토콜 (비연결지향) 클라이언트가 서버에 요청했을 때 그 요청에 맞는 응답을 보낸 후 연결을 끊는다. 2. Stateless 프로토콜 (상태정보 유지 안함) 클라이언트의 첫 번째 통신에서 데이터를 주고 받았다고 해도, 두 번째 통신에서 이전 데이터를 유지하지 않는다. 하지만 매번 페이지를 이동할 때마다 로그인을 다시 하지 않도록 유지되어야 하는 정보가 있기 때문에 stateless 를 대처하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bEO5IE/btq5uf6NUbu/2sX9hNAGSWfqT0SqXxPNY0/img.png)
자주 나오는 질문이라고 들은 건 형광펜 표시했습니다. 대답에 꼭 들어가야 하는 키워드는 컬러펜 표시했습니다. 1번 질문에 대한 꼬리질문은 1-1, 1-2와 같이 정리합니다. [질문의 목차] 인터페이스와 추상클래스의 차이가 뭔가? 각각의 존재 이유는 뭔가? 팩토리메소드패턴이 뭔가? Mutable Immutable 이란 무엇인가? 대표적인 예시를 들어봐라 그게 왜 Immutable인지 설명할 수 있는가? 그럼 그걸 Mutable 하게 쓰고 싶다면 어떻게 해야 하는가? synchronized가 뭔가? 기본형을 참조형으로 쓰는 방법은? 제네릭이 뭐고 왜 쓰나? 접근 제어자와 범위를 말해봐라. 1. 인터페이스와 추상클래스 차이 (자주 나옴) / 존재이유!! 인터페이스는 쉽게 말하면 껍데기. 설계도라고 생각하면 된..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lG2Mx/btq5uflpDX9/De69En2x1kRj7VWCWeoEd0/img.png)
자주 나오는 질문이라고 들은 건 형광펜 표시했습니다. 대답에 꼭 들어가야 하는 키워드는 컬러펜 표시했습니다. 1번 질문에 대한 꼬리질문은 1-1, 1-2와 같이 정리합니다. 2편도 있어요!!!!!! 설명이 기니까 이 포스팅에서의 질문 목차를 먼저 작성하겠다. 절차지향과 객체지향이 뭔가? Java의 특징이 뭔가? 객체지향 언어의 특징이 뭔가? 오버라이딩과 오버로딩이 뭔가? 운영체제에 독립적인 이유는 뭔가? JVM의 동작방식과 구조를 설명해봐라 가비지 컬렉터에 대해 설명해봐라 그 동작과정은? 1. 절차지향과 객체지향이 뭔가? 절차지향은 순차적인 처리를 중시한다. 장점은 컴퓨터 처리 구조와 유사해서 실행 속도가 빠름. 단점은 유지보수와 디버깅이 어렵고 실행 순서가 정해져 있어서 순서가 바뀌었을 때 동일한 결과..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/buFs8d/btq4kGdohFK/d2DMIcGxkd6bRMkaVwGMt1/img.png)
문제 링크 : programmers.co.kr/learn/courses/30/lessons/42895 #include #include #include #include using namespace std; //k개의 N을 붙여 만든 하나의 숫자를 반환. int get_basic_number(int N, int cnt){ int res = 0; while(cnt > 0){ cnt--; res += N * pow(10, cnt); } return res; } int solution(int N, int number) { if(N == number) return 1; vector dp(9); for(int k = 1; k 0) dp[k].insert(a-b); dp[k].insert(a*b); if(a/b>0) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PWK3H/btq4cfzbYUH/kEsMKGxS90W1EzDk9F49gk/img.png)
일단 원인과 해결 방법부터 적고 내 사례와 해봤던 시도들을 구체적으로 적는 건 다음 포스팅으로 넘기려고 한다. Spring Data JPA 사용 중에 데이터를 삭제한 뒤 추가하려고 했더니 duplicate entry 에러가 발생했다. unique 조건이 있는 데이터인데 삭제가 되지 않은 채로 추가를 하려 해서 발생하는 에러였다. (이게 중복 허용하는 데이터였고 디버깅을 제대로 안했다면 얼마나 큰 일이 났을런지 ...ㅎㅎ 상상하기 싫다.) 실제 코드를 실행하는 부분에서 로그를 찍어보면 delete코드가 먼저 적혀있음에도 불구하고 hibernate가 insert를 먼저 실행하고 delete는 나중에 실행하는 걸 확인할 수 있다. 원인 : hibernate에서 동작하는 SQL 순서가 정해져 있기 때문. 실제 ..