Java/Spring 22

Command 패턴

1️⃣ Command 패턴이란? Command 패턴은 요청(명령)을 객체로 캡슐화하여 실행, 취소, 저장 등을 관리할 수 있도록 하는 디자인 패턴즉, "어떤 작업을 실행하는 코드"를 하나의 객체로 만들고, 이를 실행/취소/보관할 수 있도록 하는 패턴 📍 Command 패턴의 핵심 개념명령을 객체(Command)로 만들어 독립적으로 다룸명령을 실행하는 대상(Receiver)과 실행을 요청하는 객체(Invoker)를 분리 명령을 저장하고 나중에 실행 가능Undo(실행 취소) 기능을 쉽게 구현2️⃣ Command 패턴의 구조Command 패턴은 다음과 같은 5가지 주요 컴포넌트로 구성🔹 1. Command (명령 인터페이스)실행할 작업을 정의하는 인터페이스모든 명령은 execute() 메서드를 구현실행 취..

Java/Spring 2025.03.17

Spring에서 @Transactional

Spring에서 @Transactional은 AOP(Aspect-Oriented Programming)를 사용하여 트랜잭션을 처리 @Transactional의 동작 방식AOP Proxy 생성:Spring은 @Transactional이 선언된 메서드나 클래스에 대해 AOP 프록시를 생성이 프록시는 원래의 메서드를 감싸는 대리 객체로, 실제 메서드 호출 전에 트랜잭션을 시작하고 메서드 실행 후에 트랜잭션을 커밋하거나 롤백트랜잭션 시작:트랜잭션을 관리하는 AOP 프록시는 메서드 호출 전에 트랜잭션을 시작이때 트랜잭션 관리자는 데이터베이스 연결을 확보하고, 트랜잭션 상태를 관리메서드 실행:AOP 프록시가 실제 메서드를 호출이 메서드는 비즈니스 로직을 처리트랜잭션 커밋 또는 롤백:메서드 실행이 성공적으로 완료되면..

Java/Spring 2025.03.12

Proxy 패턴

Proxy Pattern은 객체에 대한 접근을 제어하기 위해, 해당 객체를 감싸는(즉, 대리 객체) 역할을 하는 디자인 패턴 - 실제 객체에 직접 접근하는 대신 프록시 객체를 통해 간접적으로 접근- 프록시 객체는 실제 객체를 대신해 특정 작업을 수행하거나, 실제 객체에 대한 접근을 제어 가능 - 초기화 지연, 접근제어, 로깅, 캐싱 등 다양하게 사용 가능프록시 패턴의 구조Subject: 실제 객체가 구현해야 하는 인터페이스- 프록시 객체와 실제 객체가 공유하는 공통의 인터페이스로, 프록시 객체는 이 인터페이스를 구현RealSubject: 실제로 기능을 수행하는 객체- Subject 인터페이스를 구현하여, 실제 비즈니스 로직을 처리Proxy: Subject 인터페이스를 구현- 실제 객체에 대한 접근을 제어..

Java/Spring 2025.03.12

[ERROR] javax.servlet.ServletRequest.getRemoteAddr() is not supported

[이슈 당시 상황] Back단 java application, Front단 react, nextjs를 사용해서 프로젝트를 진행 AWS EC2 인스턴스로 배포 하고, Route 53으로 DNS 연결을 하고 ACM 으로 SSL 연결 해당 EC2를 443 포트로 로드밸런싱을 처리 [이슈 내용] 특정 IP만 접속 가능하도록 설정 해두었는데, 해당 IP으로 접근이 되지 않고 javax.servlet.ServletRequest.getRemoteAddr() is not supported 에러가 발생. [해결 방안] 일반적으로 Spring Security의 인증 과정에서 HttpServletRequest를 사용하여 클라이언트의 IP 주소를 가져올 수 있습니다. 그러나 특정 환경에서는 getRemoteAddr() 메서드..

Java/Spring 2023.06.28

@Transactional 적용 안된 현상 정리

한 serviceImpl 안에서 insert로직이 2번 이루어 질때 하나의 로직이 실패 할시에 Transaction으로 rollback을 할 계획 이었다. 하지만 전에 진행하던 프로젝트와 똑같은 방법으로 진행하였지만 rollback이 안되고 exception이 일어나기 전까지의 로직이 수행되어서 DB에 저장되었는데 그 과정을 처리했던 방법 정리 구글링을 통해서 1. Checked Exception일 경우 2. 한 클래스 내 @Transaction이 설정되어있지 않은 메소드에서 @Transaction이 설정된 메소드를 호출할 경우 3. 메소드가 private일 경우 4. @Transactional을 선언한 함수 내부에 try-catch구문 크게 4가지를 찾아보고 대입해 보았지만 해당 문제와 무관하였다. 해..

Java/Spring 2022.04.09

Controller parameter 받는 방법

Controller은 비지니스 로직을 처리하고 데이터를 가공 하는 역할을 하는데, 이때 비지니스 로직을 처리하기위해 controller에서 데이터를 받는 방법 HttpServletRequest @RequestParam @RequestBody @ModelAtrribute @PathVariable localhost:8082/test?id=test localhost:8082/test?searchType=all&keyword=er 1. HttpServletRequest.getParameter() - 클라이언트의 요청정보를 확인하게해주는 HttpServletRequest를 이용하기 @GetMapping("/test"); public void getInfo(HttpServletRequest request){ log..

Java/Spring 2022.04.09

ERROR - java.lang.OutOfMemoryError: Java heap space

java.lang.OutOfMemoryError: heap space Linux 터미널 1) 톰캣의 메모리 값을 확인 [root@XXXXXXX conf]# ps -ef | grep tomcat 2) tomcat이 사용중인 PID 확인 root 1403 1 0 09:49 ? 00:01:20 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_6 ... org.apache.catalina.startup.Bootstrap start 3) JVM의 HEAP 영역 정보 확인 - jmap은 JVM을 모니터링 할 수 있는 도구 [root@XXXXXXX conf]# sudo jmap -heap 1403 Attaching to process ID 1403, please..

Java/Spring 2021.09.16

ERROR - Parameter index out of range ...

Mybatis 사용하는 쿼리가 들어있는 xml의 오류 Parameter index out of range (4 > number of parameters, which is 3) 이런 에러 메시지가 발생한다. 1) 파라미터가 인덱스 보다 값을 더 많이 가지고 있는 경우 2) '#{name}' 처럼 xml에 ' ' or " " 로 묶은 경우 3) 나같은 경우에서 image 컬럼에 주석 처리에 문제가 있었음 xml의 주석은 -- , /* */ 이 아니라 로 사용해야함 !!!!!!!!!!!!!!!!!!!!! 에러가 Parameter index out of range .. 정도로 나옴 반나절 삭제... INSERT INTO LODGING ( idx , name , category , area , phone , ad..

Java/Spring 2021.07.07

ERROR - Ambiguous mapping found. Cannot map ~~

Ambiguous mapping found. Cannot map 'Controller의 이름' bean method Controller에서 @RequestMapping에 이름이 중복되서 나타나는 에러 중복된 @RequestMapping 이름을 변경해주면 해결 @RequestMapping(value = "root.do", method = RequestMethod.POST) @RequestMapping(value = "root.do", method = RequestMethod.POST) -- > @RequestMapping(value = "root.do", method = RequestMethod.POST) @RequestMapping(value = "root/detail.do")

Java/Spring 2021.07.05

java: cannot access javax.inject.Provider class file for javax.inject.Provider not found

오류 사항 : java: cannot access javax.inject.Provider class file for javax.inject.Provider not found JPAQueryFactory queryFactory = new JPAQueryFactory(em); JPAQueryFactory.class 파일에서 private final Provider entityManager; provider이 inject가 안되는 오류가 발생 나의 해결 방안 pom.xml에 javax.servlet javax.servlet-api provided com.google.inject guice 3.0 javax.inject javax.inject 1 출처 참고 coderoad.ru/40822568/NoClassDe..

Java/Spring 2021.05.03