반응형

Java 6

Java에서 파일의 Mime type을 판별하는 방법

얼마전, 로컬 파일 시스템에 저장되어 있는 파일을 바이너리 형태로 내려주는 REST API를 작성할 일이 있었습니다. 파일을 내려줄 때 Content-Type 헤더에 Mime Type을 알맞게 지정해줘야 하는데요. 찾아보니 다음과 같은 방법으로 할 수 있었습니다. Path filePath = Paths.get("file/save/path"); String fileContentType = Files.probeContentType(path); 시스템에 따라 파일 타입을 감지하지 못하는 경우도 있는데요. 제 경우엔 Mac OSX에서 파일 타입을 감지하지 못하는 경우가 있었습니다. 때문에 알아보니 URLConnection을 이용하는 방법도 있었습니다. URLConnection.guessContentTypeFro..

Back-End/Java 2020.11.04

Java ORM JPA과 객체지향 쿼리 사용(JPQL, Criteria, QueryDSL)

개요 예전부터 객체지향 언어인 자바와 관계형 데이터베이스간 패러다임의 불일치로 개발자들이 많은 불편함을 겪여왔다. 객체지향 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성 줄여주는 장치들을 제공 관계형 데이터베이스는 데이터 중심으로 구조화, 집합적인 사고가 필요하고 추상화, 상속, 다형성 같은 개념이 없음 연관관계를 표현할 때 객체는 타 객체 참조 (reference) 로, 관계형 DB 는 외래키로 표현하는 등 연관관계를 표현 객체를 테이블에 맞춰 모델링 class Member { String id; // MEMBER_ID 컬럼 사용 Long teamId; // TEAM_ID FK 컬럼 사용 String userName; } class Team { Long id; // TEAM_ID PK ..

Back-End/JPA 2019.11.04

Reflection Type을 활용해 JPA 공통 AttributeConverter 구현

얼마전에 JPA에서 사용할 공통 AttributeConverter 를 구현하면서 고민했던 점들을 정리한다. 공통 AttributeConverter 의 필요성 Entity와 테이블을 매핑하다보면 String, Integer, Long, LocalDateTime 외에 Json값이 저장되어있는 컬럼이나 코드값이 저장되어있는 컬럼의 경우 AttributeConverter 를 통해 Json 모델, Enum 과 매핑을 시킨다. // Entity @Entity public class UserEntity { @Converter(converter = UserStatusAttributeConverter.class) private Status status; @Converter(converter = UserOptionAttr..

Back-End/JPA 2019.11.04

Spring AOP 동작 방식, 원리

스프링은 기본적으로 프록시 기반 AOP 를 제공한다. 스프링에서는 Java Dynamic Proxy를 사용하거나 Cglib을 사용하여 프록시 기반 AOP를 구현했다. 이 글에서는 어떻게 Spring 에서 AOP를 사용할 수 있는 방식의 차이와 프레임워크가 AOP를 지원하기 위해 어떤 처리를 해주는지 개인적으로 분석한 내용을 정리한다. AopProxy 라는 Delegator 인터페이스로 표현되며 Dynamic Proxy 기반은 JdkDynamicAopProxy 클래스, Cglib 기반은 CglibAopProxy 클래스이다. Dynamic Proxy 기반과 Cglib 차이는 어떻게 프록시 객체를 생성하는지 방식 차이이다. Dynamic Proxy 는 프록시 객체 생성을 위해 인터페이스를 필수로 구현해야하며,..

Spring Boot 설정파일

Spring Boot의 큰 장점 중 하나는 기존 Spring을 이용하면서 해야했던 설정들 (XML방신이던, Java방식이던)을 자동으로 진행해주는 것이라 생각합니다. (AutoConfiguration)이를 통해 개발자는 설정파일 (application.property, yml 파일 등)에 간단한 설정정보들만 입력해주는 수준으로도 Spring의 다양한 기능들을 쉽게 이용할 수 있습니다. 이렇게 설정할 수 있는 설정의 종류는 굉장히 다양하며 예를들어 Datasource 설정의 경우에만도 아래와 같이 굉장히 많은 옵션들을 설정할 수 있습니다. # DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)spring.datasource.continue-on..

JPA / ORM 이란

JPA란JPA란 Java Persistence API의 약자로 자바 진영의 표준 ORM 기술이다. ORM이란 Object Relational Mapping의 약자로 객체와 관계형 데이터베이스를 매핑하는 기술을 의미한다. 즉 JPA는 자바의 객체와 관계형 데이터베이스를 매핑하는 표준 기술이다. ORM 프레임워크는 객체 / 관계형 데이터베이스 패러다임의 불일치를 개발자 대신 해결해준다. ORM 프레임워크 상에서는 개발자가 어떤 객체를 저장할 때 직접 INSERT문을 작성할 필요가 없다.객체를 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 프레임워크가 대신 적절한 INSERT문을 생성하여 데이터베이스에 저장해준다. 단순히 SQL만 생성해주는 수준에서부터 패러다임 불일치 문제를 전부 해결해주는 수준까지 ..

Back-End/JPA 2018.10.03