전체 글

java

이펙티브 자바 - ITEM 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

맞춤법 검사기 클래스를 구현한다고 가정하자. 검사기는 사전(Dictionary) 클래스에 의존하고, 이를 구현할 때 정적 유틸리티 클래스나 싱글톤 클래스로 구현하는 모습을 많이 볼 수 있다. // Singletonpublic class SpellChecker { private final Dictionary dictionary = new Dictionary(); private SpellChecker() { // 객체 외부 생성 방지 ... } public static SpellChecker INSTANCE = new SpellChecker(); public boolean isValid(String word) { ... return dictionary.contains(word)..

프로젝트

CircleCI 에서 TestContainers 사용과 시간 개선하기

이번 프로젝트는 Jenkins 대신 Circle CI를 사용했다. 이전 프로젝트에서는 젠킨스를 사용하기 위해 추가적인 인스턴스를 만들어서 사용하기에는 비용 문제가 있어서, 어플리케이션을 배포하고 있는 프리티어 서버에 도커 컨테이너를 올려서 사용했다. 부족한 메모리를 해결하기 위해 스왑메모리를 설정했지만, 프리티어 서버가 느려지거나 멈추는 문제가 가끔 발생했었다. 그래서 클라우드 환경을 제공해주는 Circle CI를 사용하게 됐다. 프로젝트에선 테스트를 위해 TestContainers 를 사용하고 있다. TestContainers는 테스트 환경에 필요한 컨테이너들의 생명주기를 관리해준다. 처음에는 다른 래퍼런스를 따라서 jdk17 Executor를 사용했고, https://www.atomicjar.com/..

spring

Spring Security CORS 이슈 해결 - Preflight 403 Invalid CORS request

발생 이슈 프로젝트를 진행하던 중 새로운 API를 구현해 배포했는데 프론트 분에게 해당 API로 요청을 보내면 CORS 문제로 403 응답을 받는다는 연락를 받았습니다. 분명히 CORS에 대한 security 설정을 했고 로그인 API에서는 일어나지 않은 문제여서 문제 파악부터 해야됐습니다. 우선 이슈 발생 당시 Config 설정과 API 요청, 응답을 확인해봤습니다. SecurityConfig.java @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final OAuth2LoginSuccessHandler oAuth2LoginSuccessHandler; private final ..

운영체제

운영체제 - 개요

운영체제란 운영체제는 컴퓨터 시스템 자원을 효율적으로 관리해서 사용자 또는 응용프로그램에 서비스를 제공하는 소프트웨어라고 할 수 있습니다. 운영체제의 역할 User Inteface : 사용자가 편하게 사용할 수 있도록 편리성을 제공 Resource Management: 하드웨어와 소프트웨어 자원을 효율적으로 관리할 수 있도록 효율성 제공 Process and Thread management: 프로세스와 스레드 관리 System management: 시스템을 관리해 보호 System Call Interface 란 사용자가 호출할 수 있는 kernal의 기능을 모아 놓은 인터페이스입니다. kernal 은 컴퓨터 자원을 관리하는 많은 기능을 제공하는데 사용자가 직접 접근을 해서 조작을 하게 되면 문제를 일으킬..

java

mockStatic 사용시 자원해제 문제

문제 발생 프로젝트 테스트 코드를 작성 후 gradle test로 모든 테스트를 실행시키는데 실패를 했습니다. 분명히 클래스 하나하나 테스트에는 문제가 없었는데 전체 테스트를 돌릴 때만 실패를 했습니다. 이 상태에서 다시 gradle test를 하면 실패한 테스트부터 실행하는데 신기하게도 모든 테스트가 통과되었습니다. 일시적인 오류로 실패를 했나싶어 다시 테스트를 돌렸지만 실패를 했고 원인을 찾아봤습니다. 우선 UserFactoryTest만 실패를 하고 원인은 값이 제대로 들어가지 않아 null 인 점, 테스트 순서에 따라 결과가 달라지는 점을 고려해 혹시 다른 테스트에서 UserFactory를 사용하는 부분에서 문제가 생기지 않았나 하며 다른 코드를 찾아봤습니다. @Test void OAuth2_로그인..

spring

Java 17, Spring boot 3 알아보기

2022년 11월 Spring boot 3 가 릴리즈되었고, 현재는 spring boot 3.1.x 까지 릴리즈 되었습니다. 새로운 프로젝트를 시작하기에 앞서 spring boot의 변경사항에 알아보기 위해 포스팅을 하게되었습니다. 스프링 부트 3은 4.5년 전 2.0이 릴리즈 된 이후 선보인 개정판입니다. 새 릴리즈 버전의 주요 사항은 다음과 같습니다. Java17 기반 Spring Native 프로젝트를 대체하는 GraalVM을 통한 네이티브 이미지 생성 지원 Spring Framework 6.0 기반 EE 9 기반의 Jakarta EE 10 지원 스프링 문서에 따르면 보안 업데이트, 버그 수정은 23년 말까지 지원합니다. Java 17 spring boot 3은 Java 17을 기반으로 하기 때문에..

고만실
하기나해