전체 글

흔한 컴공 출신 개발자입니다. 제가 경험하고 공부하고 아는 것을 적어둡니다.
· JAVA/spring
0. 이 글을 작성하는 이유 서비스를 운영 중 문제가 발생했을 때 slack으로 알람을 주기 위해 webhook이 가장 구현이 편해서 공유하고자 함 1. 준비 과정 실은 아래 2개의 문서를 참고하면 잘 된다. 역시 공식문서가 잘 되어있으면 개발자가 편하다. https://slack.dev/java-slack-sdk/guides/web-api-client-setup Installation | Slack SDK for Java API Client Installation The first step to using the Slack API client is installing the slack-api-client module. This guide shows you how to set up using Maven,..
· JAVA/spring
0. 이 글을 쓰는 이유 강의에서는 SpringBoot 2.x버전과 junit4를 붙여서 테스트를 진행하는데 내 환경은 SpringBoot 3.x버전이라 @RunWith가 먹히지 않았고 @SpringBootTest 어노테이션 하나로 퉁칠 수 있다고 한다. 도대체 왜 그게 가능한지 간단하게 정리를 해보기 위해 이 글을 작성한다. 1. Junit4와 Junit5 그리고 SpringBoot 우선 Spring Boot 2.2.x 버전을 기점으로 이후 버전은 Junit5를, 이전 버전은 Junit4를 기본 테스트 모듈로 제공한다. Junit4는 모노리식 아키텍처로 되어있고 Junit5는 모듈화 된 아키텍처로 되어있다. Junit5의 주요 모듈은 크게 3가지로 Junit Platform, Junit Jupiter,..
0. 이 글을 쓰는 이유 오늘 두 차례 티스토리 문제를 겪고 나서 과연 뭐가 문제인지 추측을 하는 과정이 재미있어 정리를 해보고자 한다. 1. 문제 상황 크롬 브라우저에서는 티스토리에 대한 특정 url에 대해 문제가 발생한 후 새로고침을 해도 계속해서 페이지에서 400에러를 리턴하는 상황 하지만 다른 브라우저에서는 정상적으로 동작하거나 크롬 자체를 재부팅할 시 정상 동작을 함 2. 문제 의심 400에러가 왜 발생하는가에 집중을 해보자. 모질라에서는 400에러에 대해 발생 이유를 이렇게 설명해주고 있다. 보통 요청을 보낼 때 사용자에 대한 인식을 어떻게 하는지 상상을 해보면 브라우저의 쿠키에 저장한 후 해당 쿠키를 기준으로 판별을 진행한다. 과연 이 쿠키에서 문제가 발생하면 어떻게 될까? 아마 정해진 형식..
· JAVA/FP
0. 이 글을 적는 이유 제곧내..라고 하기엔 좀 없어 보이는데 진짜로 java(jdk 17 기준)에서 List를 대상으로 stream을 사용해 간단한 연산을 진행하는 경우 코드에서는 어떤 일이 발생하는지 궁금해서 메모하기 위함 1. 최초 진입(stream open) 이런 데이터가 있다고 가정을 해보자. List tmpList = new ArrayList(); 그리고 내부에는 데이터가 1부터 100까지 데이터가 있다고 생각해 보자. 이 데이터를 조작하기 위해 아래와 같은 코드를 작성했다. tmpList.stream().filter(i -> i % 2 == 0).map(i -> i * 4).toList(); 그러면 최초에는 stream()을 통해 함수형 프로그래밍을 시작한다. 이 stream함수는 Coll..
· JAVA
0. 이 글을 쓰는 이유 remove, add 등의 연산 속도가 LinkedList와 ArrayList의 구조에 따라 차이가 있는 것은 data structure를 공부하다보면 자연스레 알게된다. 그럼 java코드로는 어떻게 구현이 되어있을지 많이 깊게는 보지 않지만 그래도 좀 보면서 정리하기 위해 작성함 1. ArrayList의 remove /** * Removes the element at the specified position in this list. * Shifts any subsequent elements to the left (subtracts one from their * indices). * * @param index the index of the element to be removed ..
· JAVA/spring
JPA란? Java Persistence API의 약자다. 자바에서 관계형 데이터베이스를 사용하는 데 필요한 기능을 제공하는 ORM기술이다. Spring Data JPA란? 위에서 언급한 JPA를 쉽게 사용할 수 있도록 스프링에서 제공하는 프레임워크다. 쿼리 생성, 페이징, 정렬, 캐싱 등의 기능을 제공해준다. 위에서 JPA가 ORM기술이라고 했는데 Spring Data JPA는 다양한 데이터베이스와의 호환을 도와준다. 공식 문서에서는 아래 예제가 먼저 우리를 반겨주고 있다. public interface CrudRepository extends Repository { S save(S entity); (1) Optional findById(ID primaryKey); (2) Iterable findAll..
· AWS
0. 이 글을 쓰는 이유 aws의 인스턴스를 시작하기 위해 ec2를 고르고 시작하는데 이 ec2가 어떤 건지 공식 도큐먼트에는 뭐라고 되어있나 정리하기 위함 1. EC2? Amazon Elastic Compute Cloud의 약자이다.(c가 2개라 EC2이다.) 빠르게 작업 환경을 구성할 수 있게 도와주는 시스템이다. 정말 하나 하나 다 직접 해줘야 할 부분들을 기능으로 제공하여 쉽게 제어할 수 있게 만들었다. 2. EC2의 기능 중 중요하다고 생각되는 부분 인스턴스 생성 : virtual compute 환경을 제공한다. AMI : Amazon Machine Image로 현재 인스턴스의 상태를 스냅숏 찍듯 만들어서 저장하고 공유할 수 있다. 인스턴스의 스펙에 대한 조절 : AWS는 요금제로 사용을 하기..
· JAVA/spring
0. 이 글을 쓰는 이유 통신 과정에서 method에 대한 정보를 가져온 후 특정 어노테이션이 붙은 경우에 대해 필터링을 하는 방법을 정리하기 위함 1. 가장 필요한 건 HandlerMethod Spring 공식 문서에 보면 HandlerMethod클래스에 이런 말이 적혀있다. Provides convenient access to method parameters, the method return value, method annotations, etc. 메서드의 어노테이션이나 파라미터, 리턴 등에 대해 쉽게 제공할 수 있게 해준다고 한다. 이걸로는 정보가 좀 부족한 것 같다. 요새 ChatGPT가 코딩조무사처럼 잘 도와주고 있던데 한번 예제 코드를 달라고 해 봤다. @RequestMapping("/use..
· JAVA/spring
0. 이 글을 쓰는 이유 로깅을 정말 아무것도 없는 상태에서 처음부터 적용하려고 하면 어떻게 해야 하나 정리를 하기 위함 공식 도큐먼트 : logback : https://logback.qos.ch/manual/configuration.html spring-boot : https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging Chapter 3: Configuration In symbols one observes an advantage in discovery which is greatest when they express the exact nature of a thing briefly and, a..
· docker
0. 이 글을 쓰는 이유 이번에 MariaDB로 컨테이너 설정하다가 conf파일과 최초 컨테이너 생성 시 초기화를 하는 방법에 대해 알게 되어 정리하려고 작성함 1. 최초 컨테이너가 동작하면서 sql을 실행해야한다면 결론먼저 컨테이너가 동작할 때 docker-entrypoint-initdb.d 디렉터리에 실행하고자 하는. sql파일들을 넣어주면 된다. FROM mariadb ADD ./mysql-init-files /docker-entrypoint-initdb.d EXPOSE 3306 처음에는 행복회로를 좀 돌렸다. 쿼리를 실행해서 스키마와 테이블을 만들고 해당 컨테이너로 이미지를 만들면 해당 테이블과 스키마가 같이 저장된 이미지가 만들어질 것 같았다. 하지만 어림도 없었다. 왜냐하면 이미지는 생성되는 ..
Berno
흔한 컴공 출신 개발자