전체 글 140

자바 컬렉션 프레임워크(Java Collection Framework) 정리

자바 컬렉션 프레임워크(Java Collection Framework)배열을 보완하는 컬렉션(Collection)컬렉션(Collection)은 여러 요소들을 담을 수 있는 자료구조이다. 즉, 다수의 데이터 그룹이며 컨테이너(Container)라고도 부른다. 컬렉션은 배열과 비슷하지만, 크기가 고정된 배열을 보완하여 Re-sizable한 특성을 가진다. 자바 초창기에는 Vector, Stack, HashTable 등의 컬렉션 클래스만 제공했으나 자바 1.2 이후 표준적인 방식으로 컬렉션을 다루기 위한 컬렉션 프레임워크(Collection Framework)가 등장하였다. 모든 컬렉션 클래스명은 구현한 인터페이스명이 포함되어 있어서 바로 클래스의 특징을 바로 알기 쉽다. (예를 들어 HashMap 클래스는 ..

Backend/Java 2023.12.18

Spring Security 3 버전에서 h2.console.enabled : true일 때 servlet 오류 해결 방법

Spring security 3점대 버전에서 spring.h2.console.enabled=true 로 옵션을 주니 아래 오류가 발생했다. 문제 발생 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration': Unsatisfied dependency expressed through method 'setFilterChains' parameter 0: Error creating bean with name 'filterChain' de..

스프링부트 개발환경 구성하기 (9) 게시물 조회/등록/수정/삭제

포스팅 순서는 아래와 같다. OpenJDK 17 설치 STS 4 설치 스프링부트 프로젝트 생성 메이븐 Local Repository 설정 DB 설계와 REST API 설계 mybatis 연동과 게시판 목록 조회 페이징 (Mybatis에서 Pageable) 동적 정렬처리 게시물 조회/등록/수정/삭제 (현재 포스팅) REST API 설계 내용을 기반으로 게시물 조회, 등록, 수정, 삭제 기능을 구현했다. 사실 크게 어려운 게 없기 때문에 소스 만으로 충분히 설명이 될 것 같다. BoardController.java package com.company.helloBoard.domain.board.controller; import org.springframework.beans.factory.annotation.A..

자바에서 줄바꿈 \n 개행문자 치환하는 예제

개행문자(newLine) 개행문자는 컴퓨터에서 줄바꿈을 나타내는 제어 문자를 말하며, 줄바꿈문자라고도 부른다. 개행문자에는 크게 두가지 종류가 있다. LF (new Line Feed) 라인피드, 뉴라인으로 부르며, 커서를 한 칸 아래로 이동해 새로운 라인을 추가한다. \n 아스키코드 : 10 CR (Carriage Return) 캐리지리턴, 리턴으로 부르며, 커서를 맨 왼쪽으로 이동(시작 위치로 복귀)한다. 엔터키와 동일하다. \r 아스키코드 : 13 개행문자는 운영체제마다 다름 윈도우 : CRLF (\r\n) 맥 : CR (\r) 유닉스 : LF (\n) 자바 개행문자 사용하기 자바에서 개행을 처리할 때 \r\n 으로 처리하는 것이 가장 간단한 방법이긴 하지만, 개행문자는 운영체제별로 다르게 처리될 수..

스프링부트 Scheduler 정해진 시간마다 동작 시키는법

이번 프로젝트에서 정해진 시간마다 특정 동작을 수행해야 하는 기능이 있었다. Spring Boot에서 제공하는 Scheduler 기능을 이용해서 매우 간단하게 구현할 수 있다. 이번 포스팅에서는 특정 시간에 스케줄러를 통해 특정 동작을 구현하는 다양한 예제를 살펴볼 것이다. (쪼금 스압 주의)1. 스케줄러 활성화Scheduler는 기본적으로 Spring Boot에 포함되어 있어서 의존성을 별도로 추가할 필요는 없다. 메인 Application 클래스에 @EnableScheduling를 추가하여 Scheduler를 활성화한다.@SpringBootApplication @EnableScheduling // 스케줄러 활성화 public class SchedulerApplication { public static..

Spring Boot 내장 톰캣 제외시키는 방법

Spring Boot로 개발된 애플리케이션을 실행할 때, 내장 톰캣이 아니라 다른 서버로 배포해야 하는 경우가 있다. (예를 들어 내장톰캣이 아니라 Weblogic 서버로 배포해야 할 경우) 이런 경우 내장톰캣 관련된 설정을 모두 제거해야 한다. Spring Boot 애플리케이션에서 내장 톰캣서버를 제외시키는 방법은 간단하다. 내장톰캣 제외하기 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat pom.xml에서 으로 내장 톰캣을 제외하면 된다. 그런데 간혹 내장톰캣 제외 설정을 해도 안지워지는 경우가 있다. maven repository에서 내장톰캣을 사용하는 라이브러리들을 ..

개인적으로 느낀 개발자 좋은 습관들 끄적

n년차 개발자로 일하면서, 개발 선배님들께 조언을 듣거나 스스로 부딪히면서 깨닫게 된 점들이 꽤 있다. "잘 먹고 잘 자야 건강해진다" 같은 뻔한 말이지만, 결국 그 뻔한 말들이 옳은 방향이었음을 느낀다. 지금부터 개발자 좋은 습관을 적어보려고 한다. (*개인적인 의견임을 밝힙니다) 일단 기록하자 프로젝트 투입 시 업무, 회의, 개발하면서 발생하는 모든 것들을 요약하여 기록하는 습관을 만들자. 중요한 회의에 참석 시 녹음하여 회의록에 복기한다. 회의와 관련된 내용 (회의일자, 논의주제, 참석자, 담당자 답변 예정 일자 등)을 적어두면 이것은 내 논리의 뒷받침이자 무기가 된다. 상사며 동료며 후배며, 업무 관련해서 구두로 나눈 얘기도 메일이나 메신저로 남겨놓는다. 특히 업무 지시와 보고 내용은 확실하게 적..

Spring Boot에서 static 변수로 선언한 @Value 값이 NULL일 경우

Spring Boot에서는 초기화 과정에서 컴포넌트를 주입할 때, 애플리케이션에 대한 Key/Value 형태의 설정을 클래스 내 변수에 값을 넣어주는 @Value 어노테이션이 존재한다. 이러한 설정은 application.properties 설정 파일에서 다음과 같은 형식으로 관리할 수 있다.encrypt.key=1.0.2이러한 방식을 사용하여 다른 3rd party 서비스를 사용할 때 Access Key 또는 Secret Key 같은 설정을 유용하게 할 수 있다.static 변수에 대하여 @Value 사용하기@Component로 선언된 클래스에서 @Value으로 변수를 설정하여 설정파일에 선언한 값을 가져올 수 있다. 다만 static 변수에서 다음과 같이 @Value 을 사용한다면 잘못된 결과를 초래..

postman json 형식으로 post 요청하는 법

매우 간단하지만 안쓰면 까먹는 것 중 하나 postman에서 json 형식으로 post 요청을 보내려면 Body > raw 탭을 선택하여 json 형식으로 전송하면 된다. 참고로 [Send] 버튼으로 요청을 보내면 되지만, [Send] 버튼을 펼쳐보면 [Send and Download] 버튼이 있어서 만약 응답 결과가 이미지 같은 파일이라면 이 기능으로 내 PC에 파일을 저장할 수 있다.

스프링부트 EnvironmentPostProcessor로 사용자 정의

이번 프로젝트에서 Spring Boot 애플리케이션 구동시 실행되는 기능을 만들어야 했다. EnvironmentPostProcessor 인터페이스를 활용하여 커스터마이징 환경으로 구현할 수 있었다. 이 인터페이스는 Environment 애플리케이션 컨텍스트가 올라가기 전에 애플리케이션을 사용자 정의할 수 있게 해주는 기능이다. 실제 예시를 살펴보자.사용자 정의 클래스 생성EnvironmentPostProcessor 인터페이스를 구현한 사용자 정의 클래스를 작성한다.import org.apache.commons.logging.Log; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.Environmen..