반응형

Programming/Java 69

Java 파일 확장자 구하는 방법 (filename extension)

Java 파일 확장자 구하는 방법 파일 확장자(filename extension)는 컴퓨터 파일의 이름에서 파일의 종류와 그 역할을 표시하기 위해 사용하는 부분으로, 간단히 확장자라고도 하는데요. 확장자는 파일 이름에서 마지막 마침표(.) 뒤에 나타나는 부분을 확장자로 인식합니다. (wikipedia) 아래 내용을 통해 자바(및 스프링)에서 파일 확장자를 구하는 몇 가지 방법에 대해서 살펴보겠습니다. 1. subString() 메서드와 lastIndexOf() 메서드를 사용한 방법 public String getExtension(MultipartFile multipartFile) { String fileName = multipartFile.getName(); String extension = fileNa..

Programming/Java 2023.02.06

FTP로 살펴보는 SocketTimeout(soTimeout)과 ConnectionTimeout 차이점

FTPClient로 살펴보는 SocketTimeout, ConnectionTimeout 차이점 Java FTPClient를 통한 ftp 파일 업로드를 구현하는 과정에서 FTPClient에 기본적으로 ConnectionTimeout이 설정되어 있는 상태에서 setSoTimeout() 메서드를 통해 socketTimeout이 설정되는 것을 보고 'SocketTimeout과 ConnectionTimeout의 차이점'에 대한 의문이 생겨서 정리한 내용입니다. ConnectionTimeout FTP(File Transfer Protocol)는 TCP/IP를 기반으로 한 파일 전송 프로토콜로 ftp server에 파일 업로드(다운로드, 삭제 등)를 하기 위해서는 ftp server와 연결된 상태가 되어야 합니다. ..

Programming/Java 2023.02.01

(java) Enum field에 Enum List를 사용하며 발생한 코드 리팩토링

enum field에서 enum list를 사용하면서 코드가 리팩토링 되는 과정을 정리하였습니다. 리팩토링(Refactoring)이라는 다소 고급진 단어를 사용하였지만, 상당히 간단한 코드 개선 내용임을 미리 말씀드립니다. (마지막에는 리팩토링에 따른 속도 차이가 비교되어 있으니 참고 부탁드리겠습니다.) Enum Class public enum Status { READY, PROCESSING, CANCEL, TERMINATE, DONE; } (Status Enum Class) public enum ViewStatus { PROCESSING, DONE; } (ViewStatus Enum Class) 예시로 사용될 두 개의 enum class입니다. 어떤 Entity에서 내부적으로 사용되는 실제 상태 값은 ..

Programming/Java 2023.01.13

@PostConstruct 어노테이션을 통한 스프링 빈(Bean) 초기화 콜백

@PostConstruct 어노테이션이 사용되는 이유를 알아보기 위해 먼저 스프링 빈의 생명주기에서 부터 초기화 콜백이 무엇인지, 어떤 용도로 쓰이는지에 대해 살펴보겠습니다. 스프링 프레임워크는 IoC(Inversion of Control) 컨테이너를 통해 Bean 객체들을 관리하는데요. 인스턴스 생성부터 소멸까지의 생명주기 관리를 개발자가 아닌 컨테이너가 대신해주기 때문에 개발자는 로직에 집중할 수 있다는 장점이 있습니다. (즉, 객체 관리 주체가 프레임워크가 되는 것입니다.) 스프링 빈 생명주기(Bean LifeCycle) 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 콜백 -> 스프링 종료 Spring Bean은 다음과 같은 생명 주기를 가지..

Programming/Java 2023.01.08

Java Iterable Iterator 차이점 정리

지금까지 java를 배우고 실무에 활용하면서 Iterator, Iterable을 직접적으로 쓴 적은 한 번도 없었는데요. 최근 다른 코드에서 해당 인터페이스들을 사용하는 것을 보고 무슨 기능을 하는지 궁금해서 정리한 내용입니다. Iterator Iterator는 Java Collections Framework에 속해있으며, java 1.2에서 발표된 인터페이스입니다. Iterator는 Collection에 저장된 요소를 읽어오는 것을 표준화한 인터페이스로 데이터를 하나씩 읽어올 때 사용되는데요. 다음 요소를 가지고 있으면 true를 반환하는 hasNext() 메서드와 다음 요소를 반환하는 next() 메서드가 있으며, default 메서드로 해당 iterator로 반환된 요소를 제거하는 remove() ..

Programming/Java 2022.12.02

로깅시 System.out.println() 사용을 지양해야 하는 이유

Java 프로그래밍을 처음 접하게 되면 거의 대부분이 다음과 같이 "Hello World"를 콘솔에 출력하는 것에서부터 시작하게 됩니다. 이때 사용되는 출력 방법인 System.out.println() 메서드는 자바 표준 입력 클래스인 System을 사용하기 때문에 클래스 경로에 추가해야 될 라이브러리나 추가 구성이 필요 없기 때문에 간편하고 쉽게 사용할 수 있다는 장점이 있는데요. 하지만 프로덕션 코드(Production Code)에서는 System.out.println() 메서드를 통한 출력이 지양되는데, 그 이유는 무엇인지 살펴보겠습니다. /* 로깅(Logging)이란? 로깅은 프로그램 실행 동작을 일련의 기록인 로그(Log)의 생성을 통해 남겨놓는 일을 말합니다. 로그는 재현하기 힘든 버그나 성능..

Programming/Java 2022.11.16

Java Enum 활용하기2 - ConverterFactory

Java Enum을 활용한 방법 중 두 번째, ConverterFactory 인터페이스를 구현한 CustomConverter를 만들어 HTTP 요청에서 Enum 값을 받을 때 Enum 값 자체를 받는 것이 아니라 legacyCode를 받아 자동으로 Enum으로 형 변환하는 방법입니다. @GetMapping("/user/{idx}") public ResponseEntity getUserDetail(@PathVariable Long idx) { ... } 스프링에서 HTTP Query String을 통해 전달되는 정보는 모두 문자열(String)로 인식됩니다. (HTTP 요청 파라미터는 모두 문자열로 처리) 하지만 위 예시와 같이 컨트롤러에서 Long (또는 Integer, boolean Enum 등)으로 ..

Programming/Java 2022.10.08

JPA @OneToOne 일대일 연관 관계 정리 및 LazyLoding 이슈

JPA를 사용하면서도 연관 관계 매핑을 쓰지 않다가 이번 프로젝트에서 연관 관계를 적용하기 시작하며 정리한 내용이며, JPA 연관 관계 매핑 중에서 1:1 연관 관계인 @OneToOne에 대해 정리한 내용입니다. @OneToOne 일대다(1:N), 다대일(N:1) 관계에서는 다(N) 쪽이 항상 외래 키를 가지고 있지만, 일대일(1:1) 관계에서는 주 테이블이나 대상이 되는 테이블 양쪽 모두 외래 키를 가질 수 있습니다. 때문에 일대일 관계를 적용할 때는 주 테이블과 대상이 되는 테이블, 어느 쪽에 외래 키를 둘지 선택해야 하는데요. JPA에서는 외래 키를 갖는 쪽이 연관 관계의 주인이 되고, 연관 관계의 주인이 데이터베이스 연관 관계와 매핑되어 외래 키를 관리(등록, 수정, 삭제)할 수 있기 때문에 해당..

Programming/Java 2022.10.02

Java Enum 활용하기1 - AttributeConverter

Java Enum을 활용한 방법 중 첫 번째, AttributeConverter 인터페이스를 구현한 CustomConverter를 만들어 DB에는 Enum의 legacyCode 값으로 데이터를 저장하고, Java에서는 DB에 legacyCode 값으로 저장된 데이터를 다시 Enum으로 변환해서 사용하는 방법입니다. AttributeConverter의 기본적인 사용 방법 예시 @Getter public enum UserState { NORMAL("정상", 1), SUSPENSION("정지", 2), WITHDRAWAL("탈퇴", 3); private String desc; private Integer legacyCode; UserState(String desc, Integer legacyCode) { th..

Programming/Java 2022.10.01

Java 정규표현식 사용하기(Regular Expression)

일반적으로 클라이언트로부터 입력되는 데이터에 대한 validation은 프론트엔드에서 먼저 처리됩니다. 하지만 악의적인 의도로 프론트를 거치지 않고 유효성에 대한 검사가 이뤄지지 않은 데이터를 서버에 직접 보내게 된다면 문제가 발생할 수 있는데요. 때문에 서버 역시 들어오는 데이터에 대한 validation 처리가 필요한 것입니다. 1. 정규표현식(Regular Expression)이란? 정규식은 프로젝트 개발에 있어서 빠지지 않고 사용되는 부분으로 "특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어"라고도 표현되는데요. 정규표현식은 이메일, 휴대폰 번호, 주민번호 등의 형식이나 비밀번호 같이 입력값이 정해진 형식에 맞는지 검증해야 할 때 유용하게 사용됩니다. 정규표현식을 사용할 때 이..

Programming/Java 2022.09.07
반응형