Spring Boot
-
[Spring Boot] Redis로 세션 클러스터링 적용하기Spring Boot 2023. 1. 24. 14:29
프로젝트에 세션 로그인 처리가 되어있는 가정하에 진행되었습니다. [Spring Boot] 로그인 처리 with Spring Security 들어가기에 앞서.. 다양한 방식의 세션 클러스터링 방법이 있지만 해당 프로젝트는 jar로 패키징되는 내장형 톰캣 실행으로 별도의 WAS 없이 실행하고, 또 스프링 부트에서는 간단한 방법으로 Redis를 통해 세션 정보를 등록하는 방법을 사용할 수 있습니다. 📌 Redis 설치 방법 [윈도우] Redis 설치 및 기본 명령어 [도커] Redis 생성 및 redis-cli 접속하기 build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.s..
-
[Spring] 스프링 IOC 컨테이너와 BeanSpring Boot 2023. 1. 15. 00:50
🌈 Spring IOC, Container, DI, Bean? 스프링을 사용하다 보면 꾸준히 들어오던 용어들이다. 이 장에서는 그 개념에 대해서 알아보고 정리해 본다. IOC (Inversion of Control) 제어의 역전이라 부른다. 아래에서 컨테이너와 함께 설명한다. Container (컨테이너) 컨테이너는 보통 객체의 생명주기, 생성된 인스턴스들에게 추가적인 기능을 제공한다. 스프링 컨테이너는 의존성도 관리한다. Spring IOC Container - 스프링 IOC 컨테이너 스프링은 스프링 IOC 컨테이너에서 객체를 관리하는데, 이때 스프링이 제어 권한을 가져 객체 생성, 관계, 의존성, 생명주기 관리 하는데 이때 생성된 객체를 Bean이라고 한다. 이 Bean들은 싱글톤으로 관리된다. 즉,..
-
[JAVA] 파일 다운로드 구현하기Spring Boot 2022. 11. 9. 13:12
@Controller @Controller @RequestMapping("/file") public class FileController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @GetMapping("/download") public void downloadFile(HttpServletRequest request, HttpServletResponse response) throws Exception { try { // fileName 파라미터로 파일명을 가져온다. String fileName = request.getParameter("fileName"); // 파일이 실제 업로드 되어있는(파일이 존재하는) 경로를 ..
-
[Java] jar 배포 시 File java.nio.file.NoSuchFileExceptionSpring Boot 2022. 11. 1. 01:37
🌈 resources 하위 경로에 있는 파일을 가져오려 할 때 jar로 배포 시 파일을 못 찾는 문제가 발생 ❗ 로그를 확인해보니.. 로컬 IDE에서는 file:// Jar 실행 환경에서는 jar:// 그래서 현재 클래스를 기준으로 resources에 접근해서 파일을 InputStream으로 읽어오기로 결정 // ex) resources/static/sample.css getClass().getResourceAsStream("/static/sample.css"); 📌 파일 내용 확인 할 경우 public class TestFileRead { public static void main(String[] args) throws IOException { // resources/static/sample.css를 ..
-
[Spring Boot] AOP(Aspect Oriented Programming) 적용하기Spring Boot 2022. 10. 24. 22:31
🌈 AOP(Aspect Oriented Programming)란? 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각 모듈화 한다. 핵심적인 관점: 개발자가 적용하고자 하는 핵심 비즈니스 로직. 부가적인 관점: 핵심 로직을 수행하기 위해 필요한 DB 연결(JDBC), 파일 입출력, 로깅 build.gradle implementation 'org.springframework.boot:spring-boot-starter-aop' Enable AOP @EnableAspectJAutoProxy Appplication 클래스에 해당 어노테이션을 추가한다. @EnableAspectJAutoProxy @SpringBootApplication public class AopAppli..
-
[JAVA] 파일 첨부, 파일 업로드 구현하기Spring Boot 2022. 7. 11. 13:42
🌈 HTML 폼 전송을 통해 JAVA에서 파일 업로드 하는 과정을 살펴본다. HTML enctype에 multipart/form-data를 선언합니다. Submit Controller MultipartHttpServletRequest multiRequest를 매개변수로 받습니다. @RequiredArgsConstructor @Controller public class BoardController { private final FileService fileService; @PostMapping("/register/action") public void boardRegisterAction(MultipartHttpServletRequest multiRequest) throws Exception { fileServ..
-
[Spring Boot] 콘솔 쿼리 로그 출력 설정Spring Boot 2022. 7. 6. 17:53
application.properties # 쿼리 로그 Show 설정 spring.jpa.show-sql=true # SQL문 정렬하여 출력 spring.jpa.properties.hibernate.format_sql=true # 바인딩되는 파라미터 값 출력 logging.level.org.hibernate.type.descriptor.sql=trace application.yml spring: jpa: show-sql: true # 쿼리 로그 Show 설정 properties: hibernate: format_sql: true # SQL문 정렬하여 출력 logging: level: org: hibernate: type: descriptor: sql: trace # 바인딩되는 파라미터 값 출력
-
[Spring Boot] Thymeleaf 반복되는 헤더, 푸터 레이아웃 적용하기Spring Boot 2022. 7. 6. 11:41
[Spring Boot/게시판 만들기] - 스프링 부트 프로젝트 생성하기 위의 과정을 통해 진행되는 프로젝트입니다. 📌 개발환경 IntelliJ Community, SpringBoot, Java 1.8, Gradle, Jar, Thymeleaf, JPA, MariaDB Thymeleaf Layout Header, Footer와 같이 공통적으로 반복되는 코드를 화면마다 작성하지 않고 레이아웃 처리를 통해 일괄 적용하며 본래의 콘텐츠 내용에 집중할 수 있게 도와준다. Dependency 추가 build.gradle implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' HTML - /fragments/header.html 상단 부분에 반복적으로 ..