| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- map()
- 구간합구하기
- cross origin resources sharing
- function test
- 구간합
- 2차원배열 구간합
- jquery
- @Retryable
- 2정규화
- cas알고리즘
- this
- 교차 출처 리소스 공유
- 다중db cqrs
- segregation
- 생성자
- 1정규화
- select
- 트랜잭션 동시성 이슈
- sop 우회
- 단일db cqrs
- Java
- SQL
- 백준
- 3정규화
- Bean LifecCycle
- 멀티스레드
- ajax
- 백준 11660번
- json
- lock-based
- Today
- Total
목록Spring Framework (20)
평범한 연구소
웹 서버 (Web Server)정적 콘텐츠를 처리하는 서버 (Static Content)HTML, CSS, JS, 이미지 같은 파일을 그대로 전달클라이언트 요청을 받아서 파일을 찾아 응답하는 역할ex) Nginx, Apache HTTP Server, Microsoft IIS WAS (Web Application Server)동적 컨텐츠를 처리하는 서버 (Dynamin Server)JSP, Servlet, Spring, PHP, Node.js 등 서버 로직이 실행된 결과를 만들어서 응답함어플리케이션 실행 환경(JVM 등)을 제공하고, 비즈니스 로직 처리에 관여함ex) Apache Tomcat, WebLogic, WebSphere, JBoss/WildFly, Jetty 구분웹서버WAS역할정적 자원 제공동적 ..
정답은 🙅🏻♀️ @Transactional 은 Spring AOP 기반으로 프록시 패턴을 이용해 트랜잭션 경계(시작~커밋/롤백)를 관리한다.Spring은 @Transactional이 붙은 Bean을 감싸서 Proxy 객체로 등록한다.이 프록시 객체는 public 메서드 호출을 가로채서 트랜잭션을 시작하거나 롤백한다. 여기서, 프록시는 자기 자신 안의 private/protected/default 메서드 호출은 가로채지 못한다. 이것이 private 메서드에서 @Transactional 어노테이션이 동작하지 않는 이유다. 프록시가 필요한 이유가 뭘까?Spring은 @Transactioanl을 만나면 트랜잭션을 아래처럼 처리한다.이를 위해 해당 메서드 호출을 감싸는 래핑코드가 필요하고, 이 역할을 하는..
MVC 애플리케이션 개발에 사용하는 디자인 패턴개발 영역을 Model, View, Controller 로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식UI 영역과 도메인 영역(비즈니스 로직)으로 구분되어 개발과 유지보수를 용이하게 함 Model클라이언트의 요청을 받으면 해당 요청사항을 처리하기 위한 작업이 있다.처리 작업 결과를 클라이언트에게 응답을 돌려줘야하는데, 이 때 작업 처리 결과 데이터를 Model 이라고 한다.요청 사항을 구체적으로 처리하는 영역 = 서비스 계층요청 사항을 처리하기 위한 구현 로직 = 비즈니스 로직 ViewModel 을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 Resource를 제공하는 역할 HTML 페이지 출력PDF, Excel 등의 문서 형태로 출력X..
private final - 생성자 주입생성자 기반으로 의존성을 주입한다. (Spring이 가장 권장하는 방식!)@RequiredArgsConstructor 어노테이션으로 final을 사용한 필드에 대해 생성자를 자동으로 생성해준다.필드 final 정의 가능만약 같은 타입의 빈(동일한 클래스명)이 있는 경우라면?@Qualifier 어노테이션으로 지정한 빈의 이름을 가져올 수 있다.나는 @Qualifier 어노테이션을 사용하여 데이터 마이그레이션 로직을 구현했었다 @Component@RequiredArgsConstructorpublic class UserService { private final User user;}@Autowired - 필드 주입필드 주입같은 타입의 빈이 있는 경우, @Qualifie..
SOLID 란 ? 객체지향 프로그래밍 설계의 대표적인 5가지 원칙이다. 아래 5가지 원칙의 앞글자를 따서 만든 용어이다. SRP OCP LSP ISP DIP SOLID 의 장점은 ? 객체 지향 프로그래밍의 특성과 장점을 극대화 시킬 수 있다 ! 1) SRP(Single Responsibility Principle, 단일 책임 원칙) 하나의 객체는 하나의 책임만 가져아한다는 원칙이다. 여기서 책임이란, 클래스가 담당하는 동작을 의미한다. 모듈화가 강해질수록 다른 객체와의 의존성이 줄어든다. 결합도↓ 응집도 ↑ 효율적인 유지보수가 가능. 2) OCP (Open Closed Principle, 개방 폐쇄 원칙) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야한다는 원칙이다. 새로운 기능이 추가될 때,..
댓글 신고 기능을 구현하는 중에 발생한 에러다. 신고 처리는 AJAX로 작성하였는데, Controller에서 로직이 모두 실행된 후, JSP단으로 보내주는 부분에서 발생했다. 원인은 getOutputStream() 과 getWriter() 를 둘 다 사용했기 때문이다. 신고 처리 여부를 담은 msg 데이터를 추가하는 과정에서 msg가 한글로 작성한 문자열이므로 인코딩을 추가했다. 이때 getOutputStream() 인 mode.put() 를 지우지 않았기 때문이다. getOutputStream() 또는 getWriter() 둘 중 하나만 사용하도록 작성하면 해결 된다. 한글 인코딩 과정이 필요하다면 getWriter() 를 사용하는 것이 좋겠다.