일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gc
- 동시성
- iterator
- 동시성 문제
- 스프링
- 가비지 컬렉터
- CAS
- Atomic Type
- 백엔드
- 데이터 타입
- java
- reflection
- MySQL
- jpa
- Varchar
- Locking Read
- text
- db
- Lock
- foreach
- Di
- iterable
- 가비지 컬렉션
- 자바
- MVCC
- Synchronized
- Today
- Total
목록Spring (27)
과정을 즐기자
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmGZtS/btrRnkugve6/5cXqTWkUKFTv3q4k99JFUk/img.png)
좋은 객체 지향 설계 먼저 좋은 객체 지향 설계의 5가지 원칙 SOLID에 대해 알아보자 SRP(single responsibility priciple) 단일 책임 원칙으로 한 클래스는 하나의 책임만 가져야 한다. OCP(open/closed principle) 개방-폐쇄 원칙으로 확장에는 열려 있으나 변경에는 닫혀있어야 한다. LSP(Liskov subsititution principle) 리스코프 치환 원칙으로 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야한다. ISP(interface segregation principle) 인터페이스 분리 원칙으로 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. DIP(Dependence inversion principle) 의..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/AdlcY/btrPR6o9MGu/EqW3kG9aux3r6RJkDUfof0/img.png)
Front Controller V3 1. 컨트롤러에 있는 HttpServletRequest, HttpServletResponse를 사용하지 않고 자바의 Map을 사용하여 요청 파라미터를 넘길 수 있는 구조를 만들어보자. request 객체를 model로 사용하던 구조를 별도의 다른 Model 객체를 만들어서 반환하는 구조로 바꾸자 2. /WEB-INF, /.jsp와 같이 뷰 이름이 중복되는 부분을 제거하자 1번은 MyView를 반환하던 구조에서 ModelView로 반환하는 구조로 바꿔 해결한다. 2번은 ViewResolver를 사용해 논리 뷰 이름을 이용하여 해결한다. 먼저 viewName과 model을 갖는 ModelView클래스를 만든다 private String viewName; private Ma..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dBjFI3/btrPQqonQtf/Brcgd3UbCDczyiIxclnGzK/img.png)
프론트 컨트롤러는 입구를 하나로 만들어 공통적인 처리를 먼저해준다. 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받고 요청에 맞는 컨트롤러를 프론트 컨트롤러가 찾아서 호출한다. 스프링 웹 MVC의 핵심은 프론트 컨트롤러이고 DispatcherServlet으로 구현되어 있다. Front Controller V1 먼저 가장 간단한 구조로 확인해보자 프론트 컨트롤러는 서블릿을 사용하였고 ControllerV1 interface를 만들어 나머지 컨트롤러들은 이 인터페이스를 구현한다. 프론트 컨트롤러에서는 먼저 URL 매핑 정보에서 컨트롤러를 조회한다. @WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*") ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/t5TAy/btrH32VYiUF/LDd36JkeKeW7jOw0PNysdK/img.png)
7/30 모각소 모임 전 개인 공부 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링 없이 만든 순수한 DI 컨테이너는 AppConfig를 요청할 때마다 객체를 새로 생성한다. 따라서 메모리 낭비가 발생한다. 싱글톤 패턴은 이를 해결하기 위해 객체를 1개만 생성하고 이를 공유한다. 싱글톤 패턴 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴이다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 하지만 이렇게 싱글톤 패턴을 구현하면 코드가 길어지고 클라이언트가 구체 클래스에 의존해 DIP, OCP를 위반한다. 따라서 이에 대한 해결책으로 스프링 빈을 활용한다. 싱글톤 패턴을 활용하여 이미 만들어진 객체를 공유해서 효율적으로 재사용..
회원 웹 기능 - 홈 화면 추가 @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } localhost:8080을 치면 home.html의 파일을 내려준다. 회원 웹 기능 - 등록 @GetMapping("/members/new") public String createForm(){ return "members/createMembersForm"; } localhost:8080에서 회원가입을 누르면 localhost:8080/members/new로 이동하고 members/createMembersForm.html의 파일을 내려준다. members/createMembersForm.html의..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cPYIsd/btrHqCKFhyB/uKx7hGkQ5totMP7NTDeOP1/img.png)
1. 컴포넌트 스캔과 자동 의존관계 설정 2. 자바 코드로 직접 스프링 빈 등록하기 컴포넌트 스캔과 자동 의존관계 설정 MemberController가 MemberService와 MemberRepository를 사용할 수 있게 의존관계 준비 @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } } 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Mp3SQ/btrHg23GfVf/BLyi1nPG3PSiOULwYt4tdK/img.png)
정적 컨텐츠 웹 브라우저가 localhost:8080/hello-static.html 내장 톰켓 서버가 먼저 요청 받는다. 스프링한테 넘기고 스프링은 먼저 컨트롤러 쪽에서 hello-static이 있는지 찾아본다. 컨트롤러가 먼저 우선순위를 가짐 없으면 resources 안에 있는 static/hello-static.html을 찾는다. 서버에서 하는 일 없이 파일을 그냥 그대로 웹 브라우저에 내려준다. MVC와 템플릿 엔진 MVC : Model, View, Controller 다음과 같이 분리했다. View는 화면을 그리는데 집중한다. Controller나 Model과 관련된 부분들은 비즈니스 로직과 관련 있거나 내부적인 것을 처리하는데 집중한다. model이라는 것에 화면에서 필요한 것들을 담아가지고 ..