닥치고 코딩 84

HttpStatus 잘 사용하는법

RestAPI 요청을 하면 HTTP status와 함게 응답을 내려준다. 이 글은 요청에 대한 값이 없을때 http status가 200인가,400인가 ,404인가에 대한 고민을 하다가 찾아본 결과를 정리하는 글이다. Resources와 representation의 차이 먼저 RFC에서 404 Not Found에 대한 정의를 보자 [https://tools.ietf.org/html/rfc7231#section-6.5.4](https://tools.ietf.org/html/rfc7231#section-6.5.4)The 404 (Not Found) status code indicates that the origin server did not find a current representation for the..

분석설계고민 2024.03.21

과제테스트 회고

과제 테스트를 끝냈다. 기간은 일주일이 주어졌지만 실질적으로 작업 한 시간은 주말 2틀정도? 왜 하필 그 전주에는 해외여행다녀와서 여독이 있었으며, 업무는 왜 또 많았고, 술자리도 많았을까? 머피의 법칙 같은걸까?(머피 rosha...) 핑계는 이정도하고 잘한 점, 잘못한 점, 아쉬웠던 점, 앞으로 점점 발전할 점에 대한 회고를 기록하려 한다. 다른 사람이 과제 테스트를 진행하기 전에 이 글을 보면 도움이 될 수 있도록 상세히... 잘한 점 뭐가 있으려나? 있긴하려나 굳이 생각해보자면, 과제테스트를 시도했던 점? 뭔가 결과를 내기위해 몰입했던 점?, 실제로 TDD로 구현했던 점? 좋은 코드를 짜기위해 고민했던 점? 생각해보니 많은데 전부 잘 한 부분이면서 못한 부분인 아이러니한 상황 먼저, 과제테스트를 ..

기타 2024.03.19

Spring Security 개념정리

대부분의 시스템에서는 회원의 관리를 하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해주어야 한다. Spring에서는 Spring Security라는 별도의 프레임워크에서 관련된 기능을 제공하고 있는데, 이번에는 Spring Security에 대해서 알아보도록 하겠다. 먼저 보안용어를 이해하고 넘어가야 한다. 접근 주체(Principal) : 보호된 리소스에 접근하는 대상 인증(Authentication) : 보호된 리소스에 접근한 대상에 대해 이 유저가 누구인지, 애플리케이션의 작업을 수행해도 되는 주체인지 확인하는 과정 인가(Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정(After Authentica..

Java & Spring 2024.03.12

java8 람다 표현식

람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 즉, 람다는 어떤 함수의 매개변수로 다른 함수를 넣고 싶을 때 사용한다. 익명 : 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 함수 : 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다의 구성 요소 - 파라미터 리스트 - 화살표 : 파라미터 리스트와 바디를 구분한다 - 바디 : 람다의 반환값에 해당하는 표현식 함수형 인터페이스는 정확히 하나의 추상 메서드를 지정하는 인터페이스이다. @FunctionalInterface 어노테이션을 붙여 주면..

Java & Spring 2024.03.01

[TDD한걸음] 1편 Springboot TestAnotation정리

TDD 들어가기 전에 기본적으로 테스트 코드를 작성하기 위한 문법을 알아야 TDD도 가능하다. 먼저 테스트 코드 작성을 돕는 어노테이션들을 알아보자! Spring Boot는 기본적으로 웬만한 테스트 라이브러리들을 한데 뭉쳐놓은 테스트 스타터를 제공한다. (spring-boot-starter-test) 먼저 기본적으로 자주 사용되는 어노테이션들을 살펴보자 @SpringBootTest @WebMvcTest @DataJpaTest @RestClientTest @JsonTest @SpringBootTest @SpringBootTest는 통합 테스트를 제공하는 기본적인 스프링부트 테스트 어노테이션이다. 애플리케이션이 실행될 때의 설정을 임의로 바꾸어 테스트를 진행할 수 있으며 여러 단위 테스트를 하나의 통합된 테..

TDD한걸음 2024.02.20

msa란? msa 고도화

msa 개념 MicroService Architecture(MSA)는 loosely coupled를 기반으로 여러 개의 작은 서비스로 구성되어 각 서비스가 독립적으로 개발되고 빠른 배포주기, 폴리그랏 프로그래밍, 관심사의 집중 등의 장점을 발휘해 Enterprise IT에서 가장 주목받고 있는 아키텍처이다. 폴리그랏 프로그래밍 : 단일 언어로 제공되지 않는 추가 기능과 효율성을 극대화 하기 위해 여러 언어로 코드를 작성하는 것 msa 장점 MSA를 도입하여 느슨한 결합, 관심사의 집중, 단일 책임 원칙, 빠른 배포주기, 폴리그랏, Scalability, 장애의 격리, 유연성, 확장성 등 여러 이점 msa 단점 Shared 관계형 데이터베이스 장점 사용 불가 데이터를 효율적으로 보관하고 조회/삭제 등 기능..

분석설계고민 2024.02.04

각종 타임아웃(timeout)설명과 설정 팁

Connection Timeout 클라이언트가 서버측으로 connection을 맺길 원하지만 서버의 장애 상황으로 connection조차 맺어지지 못할 때 발생하는 timeout이다. 우리가 흔히 알고있는 TCP 3 way handshake를 통해 TCP 연결이 생성되지 못한것을 의미함. Read Timeout 클라이언트와 서버가 connection을 맺으면 하나의 데이터 덩어리가 아닌 여러개의 패킷으로 나눠서 전송하게 되는데, I/O작업이 길어지거나 락이 걸려 요청이 처리되지 못하고 있을 때 클라이언트는 더 이상 기다리지 못하고 커넥션을 끊는다. 즉, 응답을 기다리지 못하는 것이다. 이런 상황을 Read Timeout 이라고 하는데 java에서는 SocketTimeout Exception이 떨어진다. ..

네트워크 2024.02.04

인덱스(index)란? 인덱스 알고쓰기!

인덱스란? 인덱스란 데이터의 저장(INSERT, UPDATE, DELETE) 의 성능을 희생하고 그 대신에 데이터의 읽기 속도를 높이는 테이블의 동작속도(조회)를 높여주는 자료구조이다. 따라서 사이트의 성능개선의 가장 기본은 효율적인 인덱스 설정이다. 인덱스를 사용하는 SQL을 만들어 효율적으로 사용한다면 매우 빠른 응답 속도를 얻을 수 있고, 쿼리의 부하가 줄어들기 때문에 시스템 전체 성능이 향상되는 효과를 얻는다. 그러나 인덱스 자체 역시 하나의 데이터 덩어리 이기 때문에, 데이터베이스에 전체 크기의 10%나 되는 추가적인 공간을 할당해줘야 하고, 잘못 사용할 경우 성능이 오히려 크게 떨어질 수 있다는 단점이 있다. (ex. 변경 작업이 자주 일어나는 경우, 인덱스가 적절하지 않은 경우) 인덱스 저장..

카테고리 없음 2024.02.01

자바 모니터링 설정

맥os 환경에서 모니터링 설정하기 각각 설정해줄 부분은 스프링부트설정, 프로메테우스 설정, 그라파나 설정이다 모니터링 시스템은 기본적으로 로그발생 => 데이터 수집 => 통합 => 시각화의 단계로 되어있다. 스프링부트 actuator 설정 - (metrics 출력을 위해) build.gradle implementation 'org.springframework.boot:spring-boot-starter-actuator' runtimeOnly 'io.micrometer:micrometer-registry-prometheus' application-{환경}.yml management: health: db: enabled: false endpoints: web: exposure: include: health,..

Java & Spring 2024.01.30