eckrin.log
close
프로필 배경
프로필 로고

eckrin.log

  • 분류 전체보기
    • [ CS기초 ]
      • 알고리즘
      • 컴퓨터구조
      • 오토마타
      • 데이터베이스
      • 네트워크
      • 운영체제
      • Linux
    • [ 아키텍쳐, 방법론, 디자인패턴 등 ]
    • [ Backend ]
      • Spring
      • Spring Web
      • Spring DB, JPA
      • Infra
      • 기타
    • [ Languages ]
      • Java
      • C
      • Kotlin
      • Go
    • [ 기타 ]
      • 백준, 프로그래머스
      • 코딩
      • 잡담
    • [ 코딩테스트 ]
    • 일기장
  • 홈
  • 태그
  • 방명록
  • 글쓰기
인텔리제이 자동 빌드 해제하기

인텔리제이 자동 빌드 해제하기

이런 코딩 외적인 문제들은 잘 기록하지 않는편인데, 꽤 오랜시간 해결을 못하고있어서 기록해두려고 한다. 발생한 문제how to disable auto build in intellij- 돌아가고 있는 스프링 프로젝트 창에서 포커스를 해제하면, 자동으로 빌드가 된다. 다시말해서 현재 사용중인 인텔리제이 창에서 alt-tab을 하거나, 다른 창에 마우스클릭을 해서 인텔리제이의 포커스가 해제되면   위와 같이 Build [project-name]이라고 뜨면서 자동으로 빌드가 되어버린다. - 큰 문제가 아니라고 느껴질수도 있으나, 코드를 작성하면서 구글링 등을 동시에 진행할 경우, 코드가 완성되지 않은 대부분의 상태에서 창을 옮길 때마다 빌드가 진행되면서   이런 에러 창이 올라오거나, 이런 성공창이 올라오기 때..

  • format_list_bulleted [ 기타 ]/잡담
  • · 2024. 1. 21.
  • textsms
[Spring] @JsonCreator 없이 immutable하게 역직렬화하기

[Spring] @JsonCreator 없이 immutable하게 역직렬화하기

배경지식 Spring Boot에서 json으로 rest api 통신을 하기 위해서 DTO를 이용하는데, http통신시에 직렬화, 역직렬화되는 과정에 대해서 원래 다음과 같은 사실들을 알고 있었다. - 직렬화, 역직렬화를 위해서 Jackson이라는 라이브러리가 많이 사용되며, Jackson 내부에서는 ObjectMapper가 Java Reflection을 사용한다. - Jackson이 직렬화, 역직렬화를 하기 위해서는 DTO에 default constructor와 getter, setter가 필요하다. Default constructor를 통해서 객체 접근/생성이 이루어지고, getter와 setter를 통해서 field들에 대한 접근이 이루어진다. - Setter를 사용하게 되면 객체의 불변성을 유지할 ..

  • format_list_bulleted [ Backend ]/Spring
  • · 2024. 1. 17.
  • textsms
[Spring Security] 스프링 시큐리티로 익명 사용자 관리하기

[Spring Security] 스프링 시큐리티로 익명 사용자 관리하기

개요 스프링 시큐리티를 사용하여 프로젝트를 디벨롭하다 보면, 회원가입이나 로그인시에는 시큐리티 필터를 통과할때 인증,인가 프로세스에서 제외하거나, 아예 시큐리티 필터를 타지 않도록 만들어야 한다. 그런데 사실 이런 경우를 제외하고도 로그인이 필요하지 않은 뷰에 필요한 api를 제작할 때 처럼, 시큐리티 필터에서 별도의 인증을 수행하지 않는 요청을 관리해야 하는 경우가 있다. .authorizeHttpRequests(authorize -> authorize .requestMatchers("/auth/**").permitAll() // 로그인 필요 X .requestMatchers(HttpMethod.GET, "/test/**").permitAll() // anonymousUser 테스트 .anyReques..

  • format_list_bulleted [ Backend ]/Spring
  • · 2024. 1. 13.
  • textsms
Spring + Kotlin + Elastic Stack으로 로깅시스템 구축해보기

Spring + Kotlin + Elastic Stack으로 로깅시스템 구축해보기

개념 ELK란 Elasticsearch, Logstash, Kibana, Beats 등의 스택들로 구성되어 시너지 효과를 내는 기술스택을 말한다. ElasticSearch 실시간 데이터 검색, 분석을 위한 분산형 데이터 저장/검색 엔진으로, 일종의 데이터베이스 시스템이다. 쉽게 말해서 여러 문서(파일) 등에서 특정 문자열을 검색하는 역할을 한다고도 할 수 있다. rdb와 유사한 역할을 하는데, 데이터를 색인화하여 빠르게 검색, 분석할 수 있도록 도와주며, 실시간 데이터를 처리해주는 역할을 주로 하며, RDB와 다르게 해쉬테이블로 되어있어 O(1)의 조회성능이 나온다. 위 표는 rdb와 elasticsearch의 용어 대응을 보여주는데, 개인적으로는 꽤 많은 차이를 보이지만 조금이라도 이해를 도울 수 있을..

  • format_list_bulleted [ Backend ]/Infra
  • · 2024. 1. 8.
  • textsms
[Spring] 동시성 이슈를 고려한 스프링 프로젝트 설계

[Spring] 동시성 이슈를 고려한 스프링 프로젝트 설계

개요 트래픽이 많아질수록 동시성 이슈를 철저하게 고려해야 한다.자바 스프링에서 발생할 수 있는 동시성 이슈를 체크하고, 다양한 해결방법에 대해서 공부해보자.  동시성 문제는 지역변수와 같이 쓰레드별로 할당되는 공간에서는 발생하지 않으며, 싱글톤과 같이 동일한 인스턴스의 필드에 접근하거나, static과 같은 공용 필드를 변경할 때 발생한다. 위와 같이 간단한 엔티티와 서비스 클래스를 생성해준 후, 재고를 감소시키는 decrease라는 로직이 동시성 이슈 위에서 제대로 동작하는지를 체크해보도록 하자.   가장 먼저 들었던 생각은 그냥 "@Transactional 어노테이션 걸어주면 되는거 아니야?"라는 단순한 생각이었다. 트랜잭션을 통해서 데이터의 무결성을 지킬 수 있지 않을까? 라는 생각으로 간단한 테스..

  • format_list_bulleted [ Backend ]/Spring
  • · 2024. 1. 3.
  • textsms
[Spring Data JPA] @Repository를 생략해도 되는 이유

[Spring Data JPA] @Repository를 생략해도 되는 이유

개요 흔히 Spring Data JPA를 사용하기 위해서 JpaRepository 인터페이스를 사용할 때 아래와 같이 사용하고는 한다. public interface MemberRepository extends JpaRepository { } 예전에 Spring Data JPA에 관해 공부할 떄 @Repository 어노테이션을 생략해도 된다는 말을 들었는데, 그 이유에 대해서 짧게 정리해보고자 한다. @Repository @Repository라는 어노테이션은 왜 사용하는 걸까? 스프링부트 프로젝트에서 많이 사용되는 @Controller, @Service와 @Repository를 살펴보면, @Component 어노테이션이 있는 것을 확인할 수 있다. 스프링은 스프링 Main클래스에 등록되어 있는 @Com..

  • format_list_bulleted [ Backend ]/Spring DB, JPA
  • · 2023. 12. 10.
  • textsms
[Spring] 비동기 환경에서 트랜잭션은 어떻게 동작할까?

[Spring] 비동기 환경에서 트랜잭션은 어떻게 동작할까?

동기와 비동기 스프링에서는 @Async 어노테이션을 이용한 비동기 호출을 지원한다. 동기 호출은 일반적인 코드 흐름으로, 코드의 순서에 따라서 순차 처리되는 일반적인 플로우를 말한다. 반면 비동기 호출은 현재 실행중인 코드의 흐름과는 상관없이, 완료 여부를 확인하지 않고 다음 로직으로 넘어가는 것을 말한다.   (동기 시퀀스 다이어그램)  동기 호출의 예시인데,  ServiceBus에서 메시지가 반환될때까지 TBJump 정보를 조회하는 플로우는 실행되지 않는다.   (비동기 시퀀스 다이어그램)   이번에는 비동기 호출의 예시이다. 처음 보낸 요청의 결과를 확인하지 않고, 두번째 로직을 실행하는 모습을 볼 수 있다.   동기 호출은 코드의 이해와 설계가 쉽지만, 많은 요청을 반복적으로 처리해야 하거나, 요..

  • format_list_bulleted [ Backend ]/Spring
  • · 2023. 12. 8.
  • textsms
[Java] Thread-safe하게 변수 관리하는 방법들

[Java] Thread-safe하게 변수 관리하는 방법들

개요 자바에서 일반적으로 사용되는 변수는 여러가지가 있는데, 흔히 유명한 것들이 메소드나 블록 내에서만 유효한 로컬 변수(local variable)나 매개변수(paramter), 객체의 생성과 함께 관리되는 인스턴스 변수(instance variable), static 키워드와 함께 선언되어 클래스 로딩 시점에 초기화되는 스태틱 변수(static variable)와 같은 변수들이 있다.  하지만 위와 같은 변수들은 멀티쓰레드 환경에서의 safety를 보장하지 않는다. 멀티쓰레드 환경에서는 여러 쓰레드가 동시에 동일 데이터에 접근을 시도하는 경우 race-condition으로 인한 가시성 문제(한 쓰레드에서 수정한 사항이 다른 쓰레드에서 보이지 않음)나 동시 접근 문제(여러 쓰레드가 동시에 접근하여 값이..

  • format_list_bulleted [ Languages ]/Java
  • · 2023. 11. 3.
  • textsms
[Spring Security] Security 인증, 인가 설정

[Spring Security] Security 인증, 인가 설정

개요 작년에 스프링 시큐리티를 처음 공부했을 때(https://eckrin.tistory.com/103) 시큐리티 구조와 초기 설계에 대해서 글을 썼던 적이 있는데, 실제로 사용하면서 궁금했던 점들을 정리해보고자 한다. SecurityFilterChain과 WebSecurityCustomizer 먼저 시큐리티 설정을 위해서 Configuration 파일을 만들 때 httpbasic, csrf, cors 등 다양한 설정을 했는데, 그 중 antMatchers(스프링 3.x버전에서는 requestMatchers로 대체)를 사용하는 SecurityFilterChain과 WebSecurityCustomizer에 대한 설명을 해보고자 한다. SecurityFilterChain에서는 특정 경로로 들어오는 요청 패턴..

  • format_list_bulleted [ Backend ]/Spring
  • · 2023. 10. 16.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ···
  • 19
  • navigate_next
전체 카테고리
  • 분류 전체보기
    • [ CS기초 ]
      • 알고리즘
      • 컴퓨터구조
      • 오토마타
      • 데이터베이스
      • 네트워크
      • 운영체제
      • Linux
    • [ 아키텍쳐, 방법론, 디자인패턴 등 ]
    • [ Backend ]
      • Spring
      • Spring Web
      • Spring DB, JPA
      • Infra
      • 기타
    • [ Languages ]
      • Java
      • C
      • Kotlin
      • Go
    • [ 기타 ]
      • 백준, 프로그래머스
      • 코딩
      • 잡담
    • [ 코딩테스트 ]
    • 일기장
인기 글
최근 댓글
공지사항
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바