일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
- Effective Java
- JavaScript
- Sort
- 카카오 면접
- 코딩테스트
- 기본
- 객체지향
- 예제로 배우는 스프링 입문
- 스프링부트
- ElasticSearch
- Effective Java 3
- effectivejava
- 자바스크립트
- 알고리즘정렬
- 클린아키텍처
- 카카오
- 이펙티브 자바
- 백기선
- java
- 스프링
- 스프링핵심원리
- kubernetes
- 김영한
- 이차전지관련주
- 엘라스틱서치
- Spring
- 이펙티브자바
- 알고리즘
- 스프링 핵심원리
- 자바
- Today
- 3
- Total
- 361,146
목록개발/Spring (45)
Kim-Baek 개발자 이야기

김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이전 포스팅에서는 좋은 객체 지향 프로그래밍이 어떤 것인지에 대해서 알아보았다. 말로만 좋은 객체 지향을 하라고 하면 어렵기 때문에 이미 여러 뛰어난 개발자가 만들어놓은 좋은 객체 지향 설계의 원칙이 있다. 앞글자를 따서 SOLID 라고도 불리는데, 대학생 때 공부를 했던 기억이 나는데, 중요한 내용이 만큼 잘 알아두면 좋다. 클린 코드라는 책을 쓴 유명한 로버트 마틴이 정리한 내용이다. 로버트 마틴이라는 분은 클린 코드도 그렇고 코드를 보기좋고 깔끔하게 작성하는 것을 굉장히 강조하는 것 같다. SRP 단일 책임 원칙 말 그대로 하나의 클래스에서는 하나의 책임만을 가져야 한다는 것이다. 사실 상당히 애매한 말일 수 있..

김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지난번 강의에서 스프링은 결국 객체지향을 잘 할 수 있게 만들어주는 프레임워크라는 것까지 내용이 나왔다. 그렇다면 이것을 알기 전에 객체 지향이란 것이 뭔지 잘 알아야지 스프링을 더 잘 이해할 수 있을 것이다. 객체 지향의 특징에는 추상화, 캡슐화, 상속, 다형성이 있다. 이 중에서 다형성을 가장 중요한 핵심개념이라고 설명한다. 그렇다면 우선 객체 지향의 정의는 무엇일까? 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은..

김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이전 글에서 스프링이 나오기 전 어떤 역사가 있었는 지를 알아봤다. 그렇다면 이제 스프링이 어떤 것인지 알아볼 차례인 것 같다. 스프링은 지금 하나의 오픈소스 프로젝트를 말하는 것이 아니다. 되게 다양한 프로젝트들이 모여서 스프링이라는 것을 구성하고 있다고 볼 수 있다. https://spring.io/projects 에 들어가보면 스프링을 구성하는 프로젝트들이 나열되어 있다. 그 중에서 스프링 부트와 스프링 프레임워크가 필수적으로 사용되는 프로젝트이다. 그리고 수 많은 프로젝트들이 더 많이 있다. 프로젝트 이름을 보면 어떤 기능을 제공하는 것인지 대충 유추가 가능한데, 스프링 클라우드는 클라우드 환경에 맞는 기능을 ..

김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지금의 스프링이 나오기 전에 자바 진영에서 가장 많이 사용하고, 표준이라고 정해져 사용되었던 기술은 바로 EJB이다. EJB가 어떤 줄임말이냐 하냐면 바로, Enterprise JavaBeans 이다. 이름만 들어도 알 수 있겠지만, 기업용의 애플리케이션을 만들기 위해서 사용되는 기술이다. EJB는 말 그래로 종합선물세트와 같은 기술이였다. Spring 과 같은 기능, 분산 처리, 트랙잭션, ORM 인 Entity Bean 까지 정말 다양한 기능을 제공하는 시스템이였다. 말로만 들어서는 정말 좋을 것 같은데, 문제가 뭐였을까? 먼저 가격적인 부분이다. 지금이야 오픈소스가 활발하고 다들 사용하는 거에 익숙해져 있지만, ..
Jpa를 사용하다가, entity를 repository를 통해서 삭제했는데 DB에 값이 남아있고 삭제가 되지 않는 경우가 있다. 어떤 경우인지 우선 살펴보겠다. 첫 번째로 유저 엔티티이다. @Entity public class Users implements Serializable { @Id @GeneratedValue private long id; private String name; @OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = {CascadeType.ALL}) private Set userRoleUser; // GETTERS AND SETTERS } 두 번째로 유저 롤 엔티티이다. @Entity public class UserRol..

OAuth2 승인 방식의 종류 Authorization Code Grant Type : 권한 부여 코드 승인 타입 클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용됩니다. 리스소 접근을 위한 사용자 명과 비밀번호, 권한 서버에 요청해서 받은 권한 코드를 함께 활용하여 리소스에 대한 엑세스 토큰을 받는 방식입니다. Implicit Grant Type : 암시적 승인 권한 부여 코드 승인 타입과 다르게 권한 코드 교환 단계 없이 엑세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식입니다. Resource Owner Password Credentials Grant Type : 리소스 소유자 암호 자격 증명 타입 클라이언트가 암호를 사용하여 엑세스 토큰에 대한 사용자의 자격 증명을 교환하는 ..

인프런에서 백기선 님의 [스프링 프레임워크 핵심 기술] 을 듣고 정리한 내용입니다 Inversion of Control: 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말 함. - 추가적으로 토비의 스프링에서의 설명 어떤 프로그램을 만들 때, 각 기능들을 만들어 두더라도 이 기능들이 필요에 따라 순서대로 작동하지 않는다면 그 프로그램은 제대로 작동할 수 없습니다. 따라서 각 기능들이 순서대로 작동하게 하기 위해서 제어(Control)가 필요합니다. 위에서 이야기한 제어할 항목들이 적다면 프로그래머가 기능의 순서를 알고 관리할 수 있습니다. 하지만 기능들이 늘어나서 수천, 수만개의 제어..
인프런에서 백기선 님의 [스프링 프레임워크 핵심 기술] 을 듣고 정리한 내용입니다 참고: 스프링 프레임워크 레퍼런스 https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html 스프링이란? https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html#overvie “소규모 애플리케이션 또는 기업용 애플리케이션을 자바로 개발하는데 있어 유용하고 편리한 기능을 제공하는 프레임워크" ● 스프링 프레임워크 그 자체 ● 스프링 프레임워크 포함 모든 스프링 프로젝트 (스프링 부트, 스프링 데이터, 스프링 시큐리티...) ● 이 강좌에서 스프링은..
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다 PSA 소개 잘 만든 인터페이스 나의 코드 확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드 나의 코드 잘 만든 인터페이스 (PSA) 확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드 Service Abstractionhttps://en.wikipedia.org/wiki/Service_abstraction 예시 스프링 웹 MVC @Controller 와 @RequestMapping 나의 코드 @Controller | @ReuqestMapping | ... Servlet | Reactive 톰캣, 제티, 네티, 언더토우 스프링 트랜잭션 PlatformTransactionManager 나의 코드 @Transacti..
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다 AOP 소개 흩어진 코드를 한 곳으로 모아 흩어진 AAAA 와 BBBB class A { method a () { AAAA -> AAA 오늘은 7월 4일 미국 독립 기념일이래요. BBBB -> BB } method b () { AAAA -> AAA 저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다. BBBB -> BB } } class B { method c() { AAAA -> AAA 점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요. BBBB -> BB } } 흩어져 있는 것을 바꾸려면, 모두 찾아가서 바꿔야하는 문제가 생겨 모아 놓은 AAAA 와 BBBB class A { method a () { 오늘은 7..
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다 Inversion of Control 제어권이 뒤바꼈다고? 일반적인 (의존성에 대한) 제어권: “내가 사용할 의존성은 내가 만든다.” class OwnerController { private OwnerRepository repository = new OwnerRepository(); } IoC: “내가 사용할 의존성을 누군가 알아서 주겠지” 내가 사용할 의존성의 타입(또는 인터페이스)만 맞으면 어떤거든 상관없다. 그래야 내 코드 테스트 하기도 편하지. class OwnerController { private OwnerRepository repo; public OwnerController(OwnerRepository repo)..
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다 프로젝트 살펴보기 ( Pet Clinic ) 프로젝트 구조 설명 일반적인 메이븐 프로젝트 src/main/java src/main/resources src/test/java src/test/resources 스프링 부트 기반 프로젝트 스프링 부트 스프링 데이터 JPA DB: HSQLDB 뷰: 타임리프 캐시: EHCache 코드가 어떻게 흘러가는 걸까? 로그로 분석하는 방법 application-properties 에서 스프링 프레임워크의 기본 로깅 레벨을 변경하면 더 자세히 볼 수 있다. 디버거로 분석하는 방법 디버깅 포인트를 찍고, Debug 모드로 실행하면 된다.

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 기본 Error Handler 스프링 부트에는 기본적으로 error handler가 들어가 있다. index페이지가 없을 때, localhost:8080으로 요청 시, 보이는 화면이 기본 error handler가 처리해준 결과이다. @MVC 예외 처리 방법 Error를 테스트 하기 위해 Controller를 만들어준다. Controller에서 /hello 요청이 왔을 때 Error를 던지게 한다. SampleException이라는 클래스를 만들어 RuntimeException을 던지도록 해준다.(extends RuntimeException) 그 후, 이 앱에 특화되어 있는 error 정보를 담고 있는 커스텀 클래스를 만들어..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 스프링부트는 복잡한 프로젝트 의존성을 '스타터(Starter)' 의존성 수십 개로 해결한다. 그저 프로젝트에 필요한 기능들을 빌드에 선언을 하기만 하면, 그에 필요한 개별 라이브러리들을 자동으로 추가해준다. 스타터 의존성을 사용안한다고 생각해보자. 그렇다면 스타터 의존성의 장점을 바로 알 수 있을 것이다. 스프링 부트 없이 빌드하려면 어떤 의존성을 추가해야 할까? 스프링 MVC를 지원하려면 어떤 의존성들이 필요할까? 어떤 버전을 사용해야 잘 호환이 될까? 이렇듯 이미 코드 첫줄을 작성하기도 전에 빌드 명세에 어떤 것을 추가하여 기능을 만들어야 할지 많은 고민해야 한다. 이러한 많은 고민 끝에 그레이들 빌드 명세에 다음 의존성..

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @SpringBootApplication은 다음의 3개의 어노테이션을 포함한다. @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration SpringBoot 어플리케이션 구동에 특히 눈여겨 볼 것은 @ComponentScan 과 @EnableAutoConfiguration @ComponentScan @Component @Configuration, @Repository, @Controller, @Service, @RestController 위 어노테이션을 포함한 모든 클래스를 Bean으로 등록한다. @EnableAutoConfiguration - 설정 자동 등록하기 S..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @WebServlet 서블릿을 선언할 때 사용되는 Annotation 이 Annotation이 표시된 클래스는 Servlet Container에 의해 처리된다. 속성 값을 통해 해당 Servlet과 매핑될 URL 패턴을 지정한다. @Controller 이 Annotation이 표시된 클래스는 “Controller” 임을 나타낸다. @Controller는 @Component의 구체화된 역할을 한다. classpath scanning을 통해 구현 클래스를 자동으로 감지할 수 있도록 해준다. 일반적으로 RequestMapping 어노테이션을 기반으로 한 handler method와 함께 사용한다. @WebServlet과 @Cont..

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @Component component-scan을 선언에 의해 특정 패키지 안의 클래스들을 스캔하고, @Component Annotation이 있는 클래스에 대하여 bean 인스턴스를 생성한다. @Controller, @Service, @Repository @Component —구체화—> @Controller, @Service, @Repository bean으로 등록 해당 클래스가 Controller/Service/Repository로 사용됨을 Spring Framework에 알린다. @RequestMapping @Controller @RequestMapping("/home") // 1) Class Level public cl..

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @Component Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 annotation이다. 즉, scan-auto-detection과 dependency injection을 사용하기 위해서 사용되는 가장 기본 어노테이션이다. @Controller Web MVC 코드에 사용되는 어노테이션이다. @RequestMapping 어노테이션을 해당 어노테이션 밑에서만 사용할 수 있다. @Repository 이것은 Annotation based Configuration, @Repository의 작업은 플랫폼 별 예외를 잡아서 Spring의 통합 검사되지 않은 예외 중 하나로 다시 던지는 것입니다. 이를 위해 Pe..

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 자바 웹 개발을 하다보면, 공통적으로 처리해야 할 업무들이 많다. 예를들어 로그인 관련(세션체크)처리, 권한체크, XSS(Cross site script)방어, pc와 모바일웹의 분기처리, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수도있으며, 소스 관리도 되지 않는다. 즉, 공통 부분은 빼서 따로 관리하는게 좋다. 이러한 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 위와 같은 공통처리를 위해 활용할 수 있는 것이 3가지가 있다. 1. Filter 2. Int..

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 서블릿 컨테이너 먼저 서블릿컨테이너를 정의하면 다음과 같을 수 있다. 서블릿 컨테이너는 웹 애플리케이션 서버중에서 HTTP 요청을 받아 처리하는 기초 역할을 맡고 있다. 대부분의 웹 프레임워크가 제공하는 기능은 서블릿 컨테이너 위에서 동작하는 서블릿, 필터, 이벤트 리스너등을 적절하게 구현한 것이다. 따라서 사용자가 웹 프레임워크로 작성한 웹애플리케이션은 결국 서블릿 컨테이너 위에서 동작한다. 서블릿컨테이너의 종류로는 아파치 톰켓, 제티등이 서블릿 컨테이너로 현재 널리사용 된다. 서블릿 구현 먼저 톰캣 즉 서블릿 컨테이너에 의해 프로그램이 실행되기 위해서는 표준 즉 Servlet interface를 구현해줘야 한다.사용자 정..