
Spring Boot와 kotlin을 사용하는 개발자들이 @Transactional 어노테이션을 통해 데이터베이스 트랜잭션을 관리합니다.저도 위와 같은 개발 스택으로 개발을 하고있는데...분명히 예외가 발생했는데도 데이터가 롤백되지 않는 경우를 겪었습니다. "아니 @Transactional 달았고 예외도 났는데 왜 DB에 저장된거지..." 제가 놓친 부분에 대해, try-catch 블록이 롤백을 방했던 경험을 정리했습니다. 기본적으로 예외 발생 시 롤백된다.unchecked exception (RuntimeException 등) 이 발생하고,그 예외가 메서드 바깥으로 전파될 때예시로@Transactionalfun createUser(name: String?) { if (name == null) t..

JPA의 관심이 세계적으로 뜨거워지면서 많은 사람들이 공부하고 많은 조직이 JPA를 도입하고 있습니다. JPA 지연로딩에 대해 많은 사람들이 강조하는데 나름 이해하고 공부한 내용을 정리해 보았습니다. 지연 로딩이란?JPA는 엔티티(Entity) 간의 연관 관계를 자동으로 매핑해 주는 편리한 기능을 제공합니다.이때 성능을 위해 fetch 전략을 설정하게 되는데, 가장 대표적인 것이 '지연 로딩(Lazy Loading)'입니다. 지연 로딩은 데이터를 실제로 사용할 때까지 SQL 쿼리를 실행하지 않는 방식입니다. 예를 들어,@Entityclass Member( @Id @GeneratedValue val id: Long? = null, val name: String, @ManyToOne(fetc..

시스템이 다양한 타임존에서 동작할 때, UTC(협정 세계시)를 기준으로 작업해야 하는 경우가 많습니다. 제가 하는 프로젝트가 세계 어디에서든 사용할 수 있도록 i18n까지 도입하고 협정 세계시도 적용해서 동적으로 바꿔 보여주는 작업을 거칩니다.사용자에게는 로컬 시간을 보여줘야 하죠.Spring Boot에서 LocalDateTime과 처리했던 일을 기록해 봅니다. LocalDateTime과 ZonedDateTime의 차이 LocalDateTime은 타임존 정보를 가지지 않는 시간 정보를 제공합니다. 즉, 시스템의 로컬 타임존에 기반한 날짜와 시간 정보를 나타냅니다. 시간대 정보가 없으므로 단순하게 현재의 시간 정보만을 나타냅니다. ZonedDateTime은 타임존을 포함하는 시간 정보를 제공합니다. 즉,..

spring으로 개발한다고하면 한번쯤은 들어봤을 시큐리티.처음에 공부하려고 열어봤다가 바로 닫았던 기억이 있네요. Spring Security는 Java 애플리케이션에서 보안을 제공하는 강력한 프레임워크인데요.시큐리티는 인증(Authentication)과 권한 부여(Authorization) 작업을 처리하는데 중점을 두고 있고, 다양한 보안 기능을 제공합니다. 그 중에서도 'UsernamePasswordAuthenticationToken' 클래스를 알아보겠습니다. UsernamePasswordAuthenticationToken'UsernamePasswordAuthenticationToken' 클래스는 사용자 인증을 처리하는 중요한 역할을합니다.Spring Security에서 사용자 이름과 비밀번호를 기..

내가 원하는 로그 jeus log X node log X spring(project)(application) O 아무것도 설정하지 않았을 때 /home/jeus_nps/jeus8_5/bin/logs에 application 로그가 찍힌다. 요약 jeus admin server에서 프로젝트 start 전에 들어오면 Server 설정을 할 수 있다. log Home을 지정해 주면 해당 위치에 3개 로그 파일 생깁니다. 문제 프로젝트(SpringBoot) 로그를 찍고 싶어서 찾아보면 대부분 Jeus 로그를 가리키는 것 같다. 아니더라도 따라 해봤을 때 뭔가 잘못됐는지 안 찍힌다. jeusHome/bin 디렉터리 이 중 jeus.properties 폴더를 java 설정 위치에 -Djeus.log.home=/hom..

갑자기 서버 연결을 했는데 hikaripool 에러 뜨면서 디비 연결 거부를 당했다. 에러명 JDBC-90401:Connection refused by the server. - Connection refused: connect 요약 tbdown clean tbboot 해결 관리자 권한으로 터미널 켜서 데이터베이스 꺼주고 다시 켜주면 연결 잘 된다. 성공

요약dbRClick - Edit Connection - Main - Show all databases check 계정에 데이터베이스 추가로 만들고 분명 데이터베이스를 추가로 만들었는데 계속 안 보이고 데이터베이스 연결하면 또 연결이 돼서 확인해 보니 DBeaver 데이터베이스 세팅 문제였습니다. 데이터베이스 우클릭 - Edit Connection - Main - Show all databases 체크 이전에는 PostgreSQL 탭에 체크가 해제되어있었는데 최근 Show all databases를 Main탭에 옮긴 것 같습니다. 세팅 확인을 잘 안 하고 연결 테스트로 바로가다 보니 이런 걸 놓쳐 시간을 뺏겼네요...

JPA 관계형 데이터베이스 영속성(db에 데이터를 넣어 영구적으로 관리하는 것)을 관리하기 위한 JAVA표준 인터페이스 Hibernate 가장 인기있는 JPA의 구현체, ORM(객체-관계 매핑) 프레임워크 중 하나. ORM 객체 관계형 데이터베이스 간의 매핑을 자동화하는 기술. 이 기술로 개발자는 객체를 사요하여 데이터를 다루고, ORM프레임워크가 이를 데이터 베이스 테이블과 매핑시켜 준다. 그런 기술이다. 하이버네이트는 JPA의 구현체 중 하나로, 자바 애플리케이션에서 객체와 관계형 데이터베이스 간의 매핑을 쉽게 처리할 수 있게 해주는 도구입니다. JPA는 객체 지향 프로그래밍 방식으로 데이터베이스와 상호 작용할 수 있도록 해줍니다. 이를 통해 개발자들은 SQL 쿼리를 직접 작서 아는 번거로움 없이 객..

Tomcat work디렉터리 Catalina 폴더 생기는 이유 jsp 파일들의 컴파일된 결과물이 저장되는 곳입니다. 안에 Catalina폴더는 톰캣을 실행하지 않으면 존재하지 않습니다. 왼쪽 사진이 한 번이라도 실행시킨 톰캣이고 오른쪽은 한 번도 구동하지 않은 톰캣입니다. 톰캣이 웹 애플리케이션을 컴파일하고 생성할 때 생성되는 파일들을 저장합니다. 컴파일 테스트 컴파일 테스트를 위해 C:\tomcat\tomcat9.0.86\webapps\ROOT 부분에 jsp파일 하나 만들어 컴파일해봤습니다. 톰캣 실행 (컴파일 후) >>> 파일을 만들고 컴파일하면 밑에 코드가 생겼다. 컴파일되면서 class파일로 추가되는 것을 볼 수 있다. 까보자 test_jsp.java 입력한 게 out.println으로 html로..

startup.bat 파일은 Apache Tomcat을 실행하는 데 사용되는 배치 파일입니다. Tomcat서버를 시작하기 위해 필요한 환경을 설정하고 Java 프로세스를 실행하는 역할을 한다. 일반적으로 Window 환경에서는 이 파일을 사용하여 Tomcat을 시작하고 실행한다. 유닉스 기반 맥, 리눅스는 statup.sh 파일을 이용해서 시작하겠죠. 우선 startup.bat파일은 이와 같이 생겼다. 요약 아래 정리 처럼 코드 벼로 정리해도 좋지만 전체적으로 흐름이나 어떤 코드를 의미하는지만 분석해도 좋다. 누군가에게 설명할 땐 이렇게 설명할 것 같다. 이중 메인 명령은 가장 밑 call 부분이다. startup.bat인 만큼 위쪽에서 '해당 폴더에 파일이 있는지 확인하고 있다면 다음으로 넘어가', '..