본문 바로가기

개발기술/Spring

(8)
Spring Security 전체개념 데이터 유출의 위험성Attackers can gain access to a Wi-Fi network/router and control or monitor the data that flows through it in several ways. How Interception Happensa. Man-in-the-Middle (MitM) Attack: The attacker positions themselves between the user and the server, either by controlling a network device (like a router) or through a compromised Wi-Fi network (e.g., an insecure public Wi-Fi hotspot).b...
Spring Security - JWT 인증방식 구현 스프링 Security - Jwt Authentication 구현 흐름  SignUp 시, 사용자는 사용자 이름(username), 비밀번호(password) 등의 정보를 제공하며, 이러한 정보는 UserDetails 객체(또는 유사한 엔티티)에 캡슐화되어 데이터베이스에 저장됩니다. 비밀번호는 안전하게 해시된 후 저장됩니다. SignIn시, 입력된 자격 증명(사용자 이름과 비밀번호)은 저장된 UserDetails와 비교됩니다. 비밀번호가 저장된 해시와 일치하면, JWT 토큰이 생성되어 사용자에게 반환됩니다. 이 토큰에는 사용자의 ID나 권한 등의 정보가 인코딩되어 있습니다.  사용자가 보호된 API에 접근하면, 필터(e.g., SecurityContextPersistenceFilter)가 요청을 가로채고..
Spring 동시성이슈 해결 동시성이슈여러 요청이 동일한 자원에 접근하며 발생하는 문제를 통칭함. 주로 DB에서 동일한 레코드를 동시접근하면 문제가 발생.예) 사용자1과 사용자2가 계좌1의 잔액 1만원을 1천원 사용하는 요청을 동시에 보냈을때, 사용자1의 요청에 의해서 잔액이 9천원이 되기전에 사용자2의 요청이 시작되어 두 사용자의 요청 결과가 각각 잔액 9천원으로 저장되어 2천원 사용이 되어도 1천원만 감소하는 경우. 동시성이슈 해결방안1. DB의존적인 해결방식 : DB 기기의 Isolation Level을 Serializable로 장치를 하거나 JPA의 Optimist Lock, Pessimistic Lock을 사용하여 DB의 기능을 사용- 단점 : DB서버는 인프라 확장이 어려워 성능의 한계가 뚜렷한 기기이다. DB의존적인 방..
스프링부트 전체구조 스프링 전체흐름1. Server Startup:When you start your Spring Boot application (or deploy it to a servlet container like Tomcat), the server begins its initialization process.2. Spring Boot Application Initialization:SpringApplication.run(): This method is called in your main() method, which starts the entire Spring application.Spring Boot Auto-Configuration: Spring Boot auto-configures the application c..
스프링 MVC 스프링 MVC의 개념, 흐름 MVC는 R&R을 명확하게 하기 위해서 Layer을 나누는 디자인 패턴이다. Model은 데이터객체, View는 화면처리, Controller은 로직처리 후 모델과 뷰를 지정하는 역할을 분담한다.   전체 프로세스 흐름은 Disptcher servelet에서 request를 최초로 접수받고 dispatcher은 request를 url과 http method을 참고하여 어떤 controller(handler)에 request를 전송할지 판단한다. 이 판단은 각 spring method에 붙어있는 @requestmapping을 통해서 mapping 해준다. 이후 controller로 보내면 서비스 호출 등을 통해, request를 처리한 후, 사용할 뷰의 정보를 dispatche..
스프링 부가기능 (Resource, AOP, 유효성검증, 데이터바인딩,spel) 외부자원 가져오기앱은 단순히 내부코드로만 동작할 수 없고 결국 자원을 끌어올 때가 있다. 외부 API, 외부 url, 외부 이미지, 내부 file system의 자원, 내부 패키지내 클래스라던지 등등 자원을 사용할 필요성이 있다. java 기본 라이브러리에서는 자원을 가지고오는 기능들이 충분하지않고 사용하기 어렵게 되어있어 스프링은 resource interface를 통해서 이러한 기능들을 제공한다. 각 자원의 종류별로 resource interface를 상속하는 구체적인 구현체들이 있으며 이를 사용하여 resouce를 다룬다. 그리고 스프링컨테이너인 applicationcontext에 구현되어있는 resourceloader을 사용하여서 자원들을 불러온다. 마찬가지로 applicatiocontext같은 ..
스프링 도입배경 - 객체지향적 코드개선 원본 코드 현상황 분석 : 결제서비스(Class1)가 결제를 위해 머니어뎁터(Class2)를 호출해서 사용하는 단순한 형태였는데,  PayMethod라는 parameter 값에 따라서  Class2(머니어뎁터)를 쓰던지 Class3(카드어뎁터)를 쓰던지 분기하여야함. 문제분석 :  if-else문으로 분기하여, Class2(머니어뎁터)와 Class3(카드어뎁터)와 하위 로직들을 끌어와서 사용시 class1 내의 코드 복잡성이 증가함. 추후 분기의 종류 및 class1와 외부클래스 사용점이 늘어나면 외부클래스 종속적인 코드 증가함. 해결책 : DIP원칙과 Interface의 다형성 기능을 활용하여 Class1과 Class2,Class3 사이를 interface를 거치어 사용되도록 하면 (class1이 in..
스프링 도입의 핵심 - Application Context, DI/IOC/Bean 스프링의 핵심(1) : DI(Dependency Injection) 의존관계주입의존성: 한 클래스가 기능을 수행하기 위해 다른 클래스의 메서드나 데이터에 의존하는 관계를 말합니다.주입: 의존성이 필요한 객체를 직접 만들지 않고, 생성자, 메소드, 또는 프로퍼티를 통해 외부에서 받는 과정을 말합니다.  A가 B에 직접적으로 의존한다면 A는 B의 변화에따라 덩달아 변하게된다. 그런 의존성을 A 혹은 B 클래스 코드 내에서 직접 연결시키지않고, Configuration이라는 외부에서 실제구현 객체와 Spring Context객체를 만들어서 연결성(의존성)을 지정(주입)해준다.    자바개발이 찰흙으로 물건을 만드는 거라면, 스프링은 Container라는 판 위에서 레고로 조립을 하는 것과 같다. bean이라는..