Java 환경에서 AES를 사용한 암호화 사용 정리
·
Java
DB 칼럼 암호화를 위한 AES 대칭키 암호화 방법최근 개인정보 보호 및 데이터 보안의 중요성이 커지면서, 데이터베이스 내 민감한 정보를 암호화하는 요구사항이 증가하고 있습니다. 본 포스트에서는 AES (Advanced Encryption Standard) 를 활용하여 DB 칼럼을 암호화하는 방법과 그 구현 예제를 소개합니다.1. AES란?AES는 미국 정부에서 채택한 표준 대칭키 암호화 알고리즘입니다.대칭키 암호화: 암호화와 복호화에 동일한 키를 사용합니다.키 사이즈: AES는 128, 192, 256비트 키를 지원하며, 키 길이가 길수록 brute force 공격에 대한 방어력이 향상됩니다.자세한 내용은 Wikipedia의 AES 문서 를 참고하세요.2. AES의 구성 요소AES 암호화를 구현하기 위..
스프링의 트랜잭션 처리
·
Java/Spring
이미 현업에서 자주 사용하지만 따로 정리하지는 않아서 이번 기회에 공식 레퍼런스를 보며 내용을 정리해보았다.스프링 트랜잭션 처리스프링 공식 문서: 트랜잭션 관리@Transactional 애노테이션은 인터페이스, 클래스, 또는 메서드에 트랜잭션의 의미를 부여하는 메타데이터이다. 예를 들어, "이 메서드가 호출될 때 새로운 읽기 전용 트랜잭션을 시작하고, 기존 트랜잭션은 일시 중지한다"는 의미를 가진다. @Transactional의 기본 설정은 다음과 같다:전파(Propagation): PROPAGATION_REQUIRED격리 수준(Isolation Level): ISOLATION_DEFAULT읽기-쓰기(Read-Write) 모드: 트랜잭션은 기본적으로 읽기-쓰기 모드이다.타임아웃(Timeout): 트랜잭션..
JPA & Hibernate Cache
·
Java/JPA
하이버네이트는 내부적으로 두종류의 캐쉬를 지원하는데 하나는 First-level cache 이고 다른 한종류는 Second-level Cache 이다 First-level cache? 대부분의 ORM (Object Relational Mapping) 프레임워크가 지원하는것처럼 하이버네이트또한 일차적 캐쉬를 지원한다. 일차캐쉬는 Hibernate 의 Session 단계에서 지원하는 캐쉬로 가장 비싼 연산작업중 하나인 데이터베이스와의 대화를 줄여주기 위해 존재한다. Session 안에서 동작하는 캐쉬이기 때문에 Session 이 종료되면 캐쉬도 같이 사라지게 된다. Second-level cache? First level cache 이 세션 단계에서의 캐쉬라면 second level cache 는 sessi..
JPA Cascade Types
·
Java/JPA
JPA를 사용해서 엔티티간의 관계를 설정할때 아래와 어노테이션을 작성하는 일이 많은데 어떤 의미를 가지고 있는지 알아보자 @OneToMany(cascade={CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.LAZY) 먼저 각각의 CaseType에 들어가기전에 영속성 컨텍스트와 JPA의 상태에 대한 선행지식이 필요하다 Persistence Conxtet (영속성 컨텍스트) 공식문서의 정의를 참조해보자 EntityManager (Java(TM) EE 7 Specification APIs) Interface used to interact with the persistence context. An EntityManager instance is associ..
Spring 에서 런타임 환경에서 프로퍼티 값을 변경하는 방법
·
Java/Spring
Spring Boot 및 일반 Spring 환경에서 외부 서비스 기반 설정 관리 방법어플리케이션을 구동할 때 필요한 설정값들은 보통 환경변수(Environment Variables)나 파일에 저장하여 관리합니다. 하지만 최근에는 설정값을 Zookeeper, AWS Secrets Manager와 같은 외부 서비스에서 불러오거나, 보안을 강화하기 위해 메모리 내에서만 설정값을 저장하는 방식이 점점 더 선호되고 있습니다. 이러한 요구사항을 충족시키기 위해 Spring Boot와 일반 Spring 환경에서 설정값을 효과적으로 관리하는 방법을 소개합니다.Spring Boot에서 환경 설정값 관리하기Spring Boot는 EnvironmentPostProcessor를 활용하여 어플리케이션 시작 시점에 환경 설정값을..
스프링 프로파일 (Spring profile) 을 통해 환경별로 다른 설정을 해보자
·
Java/Spring
Spring Profiles를 통한 환경별 설정Spring에서는 spring.profiles.active라는 프로퍼티를 이용해 현재 활성화된 프로파일(환경)을 지정할 수 있습니다. 이를 활용하면 개발(development), 운영(production), 로컬(local) 등 다양한 환경마다 다른 설정파일을 로드하거나 다양한 빈 설정을 적용할 수 있습니다.주의사항Maven Profile과는 별개의 개념이므로 혼동하지 않도록 주의하세요. Maven Profile은 빌드 시점에 적용되는 것이며, Spring Profile은 런타임 시점에 활성화되는 설정입니다.Maven Profile 설정은 관련 문서를 참고하세요.프로파일 설정 방법다음은 spring.profiles.active 값을 설정하는 여러 가지 방법입..
Spring 내에서 리소스 불러오기
·
Java/Spring
스프링 프레임워크에서 ResourceLoader를 활용한 파일 접근스프링(Spring) 프레임워크를 사용하다 보면 webapps 폴더 내의 파일들에 접근해야 하는 경우가 종종 발생합니다. 예를 들어, 설정 파일이나 정적 자원에 접근해야 할 때가 그렇습니다. 전통적으로는 ServletContext를 이용하여 파일에 접근할 수 있지만, 이 방법은 ServletContext에 의존적이라는 단점이 있습니다. 특히 특정 동작만을 위한 모듈을 추가하거나 테스트 환경에서 유연하게 사용하기 어렵습니다.스프링에서는 이러한 문제를 해결하기 위해 ResourceLoader를 제공하여 보다 유연하게 파일에 접근할 수 있도록 지원합니다. 이번 포스트에서는 ResourceLoader를 활용한 파일 접근 방법을 살펴보고, 실용적인..
스프링 Properties 파일을 이용해서 설정하기
·
Java/Spring
프로젝트를 진행하다보면 파일안에 Properties 파일들을 저장해놓고 사용하는 일들이 자주 생긴다. 가장 간단하게 사용하는 방법은 XML 혹은 JSON을 특정 경로에 넣고 파싱하는 방법이 있으나 설정파일을 사용하는 곳이 많아질 경우 복잡하다. 스프링 프레임워크는 프레임워크 단에서 Properties 를 설정하는 방법을 가지고 있다. Spring 설정 xml 안에 아래와 같은 설정을 추가한다. 그럼 자동으로 WEB-INF 경로 아래에 있는 *.properties 밸류들이 로드된다. 스프링 내에서 사용하기 위해선 아래와 같이 사용한다.@Component class MyClass { @Value("${my.property.name}") private String[] myValues; } 만약 위의 설정 방법..
Mybatis + Myabtis Spring 사용시 마이바티스 설정파일 사용법
·
Java/Spring
MyBatis를 Spring과 함께 사용할 경우, 기본 설정만으로도 대부분의 상황에 충분히 대응할 수 있습니다. 별도의 세부 설정이 필요한 경우를 제외하고는 디폴트 설정을 활용하는 편이 일반적입니다. Spring에서는 MyBatis 설정을 자동으로 처리해주는 부분이 많기 때문에, SqlSessionFactoryBean에 mapper 위치 정도만 지정한 뒤 사용하는 경우가 잦습니다. 예를 들어, Spring의 기본 설정 파일을 아래와 같이 작성한 뒤, 매퍼 파일들을 resources/mapper 혹은 resources/mybatis와 같은 디렉토리에 배치할 수 있습니다. 여기서는 mapper 폴더 아래에 mybatis-config.xml을 두는 예시를 들어보겠습니다. 예시 설정 (mapper-config...
JPA 테이블 매핑과 어노테이션 가이드
·
Java/JPA
JPA 테이블 매핑과 어노테이션 가이드JPA(Java Persistence API)에서 테이블을 정의하는 방법에 대해 자세히 알아보겠습니다. JPA는 자바 애플리케이션에서 관계형 데이터베이스를 객체지향적으로 사용할 수 있게 해주는 기술입니다.기본 엔티티 매핑가장 기본적인 엔티티 매핑에는 다음과 같은 어노테이션들이 사용됩니다:@Entity클래스가 JPA 엔티티임을 나타냅니다. 이 어노테이션이 적용된 클래스는 데이터베이스 테이블과 매핑됩니다.@Entitypublic class Order { // 클래스 내용}@Table엔티티와 매핑할 테이블을 지정합니다. 생략하면 엔티티 이름이 테이블 이름으로 사용됩니다.@Entity@Table(name = "ORDERS", uniqueConstraints..