Spring Security 기본 구성

*Spring Security in Action을 읽고 작성했습니다. https://product.kyobobook.co.kr/detail/S000061695014 Spring Security와 구성 요소 Spring Security는 스프링 프로젝트의 사실상 표준(defacto)입니다. 보안에 관련된 사전 구성 요소가 제공되며, 필요에 따라 일부 구성 요소만 재정의하여 사용할 수 있습니다. Spring Security 의존성을 프로젝트에 추가하고 애플리케이션을 시작하면 아래와 같은 메시지를 확인할 수 있습니다. Using generated security password: 41632cba-2835-43e3-85c8-3aeac7ce686a This generated password is for development use only. Your security configuration must be updated before running your application in production....

July 18, 2023 · 조민준

Java ExecutorService에 대하여

ExecutorService ExecutorService를 사용하면 간단하게 스레드풀을 생성해서 병렬처리를 할 수 있습니다. Executors의 스태틱 메서드를 통해 간단하게 ExecutorService를 사용할 수 있습니다. 생성자를 이용해 커스텀하게 생성할 수도 있습니다. 이상적인 풀 사이즈 Task Type Ideal pool size Considerations CPU bound CPU Core count 얼마나 많은 작업이 같은 CPU에서 동작하는지 (Context switching 비용) I/O bound High 각 작업의 평균 대기 시간, 너무 큰 스레드 풀은 메모리 사용량을 고려해야함. int coreCount = Runtime.getRuntime().availableProcessors(); // int coreCount = taskExecutionProperties....

July 14, 2023 · 조민준

사소한 Thread-safe Tips

가능하다면 로컬 변수를 사용합니다. 프레임워크에 위임합니다. e.g. RequestContextHolder ConcurrentHashMap 같은 요소를 ThreadLocal 변수로 변경할 수 있는지 검토합니다. public class UserContextHolder { public static ThreadLocal<User> holder = new ThreadLocal(); } class HoldingService { public void holdUser() { // Set user for this thread User user = getUser(); UserContextHolder.holder.set(user); } } class SomeService { public void getUser() { // Get user for this thread User user = UserContextHolder.holder.get(); // Remove user; user no longer required UserContextHolder....

July 13, 2023 · 조민준

12 factor app (15 factor app)

Introduction 12 factor app은 서비스형 소프트웨어를 구성하기 위한 방법론입니다. 개발 언어/프레임워크에 상관없는 이식성과 플랫폼 호환성 향상을 위한 디자인 원칙입니다. 애플리케이션의 수평적 확장이 용이하도록 합니다. 애플리케이션 확장 가능성 CI/CD에 용이성 플랫폼간 이식성 기본적인 기대치, 정책 설정 1. Codebase 형상관리 시스템에서 하나의 코드베이스를 관리하면서, 다수에 배포한다. 하나의 코드베이스에 여러개의 애플리케이션 코드가 있다면 12 factor app 위반입니다. 코드베이스는 모든 배포에 사용되지만 각 배포는 다른 버전이 사용될 수 있습니다. 2. Dependencies 의존성을 명시적으로 선언하고 분리한다....

February 24, 2023 · 조민준

Shell Script

Shell Script 쉘 스크립트로 만든 UP-DOWN 게임 Shell이란 운영체제에서 커널과 사용자 사이를 이어주는 역할을 하는 명령어 해석기이다. Shell은 bash sh csh zsh등이 있다. Shell Script란 운영체제의 Shell을 이용해서 Shell 명령어들을 순차적으로 실행시켜주는 스크립트이다. Shell Script를 사용하기 위해서는 다음과 같이 시작해야 한다. #!/bin/bash #!/usr/bin/env bash #!/usr/bin/env python3 위와 같이 #!으로 시작하여 Shell의 경로를 선언해준다. 이를 쉬뱅이라 한다. 쉬뱅은 어느 인터프리터가 스크립트의 명령어를 해석할 지 가리킨다. 변수 변수 number=1 string="string" echo "$number" echo "$string" echo "${number}" echo "${string}" 변수는 위와 같이 공백을 사용하지 않고 선언한다....

January 9, 2023 · 조민준

DDD 핵심 정리

0. 참고 도메인 주도 개발 시작하기 도메인 주도 개발 시작하기 - YES24 핵사고날 아키텍처 Hexagonal Architecture with Java and Spring https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/ 예제 프로젝트 https://github.com/jo-minjun/order-delivery-project 1. 도메인이란 무엇일까? wikipedia: Domain (software engineering) A domain is the targeted subject area of a computer program. It is a term used in software engineering. Formally it represents the target subject of a specific programming project, whether narrowly or broadly defined. 소프트웨어 엔지니어링에서 사용되는 용어 컴퓨터 프로그램의 대상이 되는 영역 Example 소프트웨어 프로젝트의 목표가 특정 병원을 위한 프로그램을 만드는 경우 범위를 확장하여 모든 병원을 대상으로 하는 프로그램을 만드는 경우 상점과 기사를 이어주고 고객에게 물품을 전달해주는 라스트마일 서비스 2....

December 30, 2022 · 조민준

MSA 개발 스택 빠르게 훑어보기

본 포스팅은 (주)부릉의 MSA 스택에 대한 내용으로, 모든 MSA가 아래와 같은 내용으로 구성되는 것이 아닙니다. (주)부릉의 온보딩 내용을 정리한 포스팅입니다. 1. 요구사항 아주 간단한 웹 기반 ITunes 주요 데이터는 다음과 같다. 가수 (Singer) 이름 정보를 가진다. 앨범 (Album) 발매 날짜, 앨범 제목 정보를 가진다. 노래 (Song) 노래 제목과 재생 시간 정보를 가진다. 공통 데이터 생성 시간 업데이트 시간 생성한 사람 업데이트한 사람 주요 기능 가수를 등록할 수 있다. 앨범을 등록할 수 있다....

December 28, 2022 · 조민준

객체 지향 설계와 스프링

1. 스프링이란? 스프링의 생태계 필수: 스프링 프레임워크, 스프링 부트 선택: 스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs, 스프링 배치, 스프링 클라우드 가장 중요한 것: 스프링 프레임워크 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술: 스프링 MVC, 스프링 webFlux 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합: 캐시, 이메일, 원격접근, 스케줄링 테스트: 스프링 기반 테스트 지원 언어: 코틀린, 그루비 *최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용한다....

July 1, 2022 · 조민준