Framework 51

[Spring] OOP와 비교하여 AOP 공부

OOP 복습 OOP(객체 지향 프로그래밍)은 객체를 중심으로 프로그래밍을 진행하는 것이다. 공통된 목적을 띈 데이터와 동작을 묶어 하나의 객체로 정의하는 것이 핵심으로, 특징으론 캡슐화(데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶어), 은닉화(캡슐화의 목표. 내부 구조는 private하게 감춰두고 외부에서 조작할 수 있는 정보만 public으로 공개), 추상화(객체의 공통된 특성을 추출하여 모델링하는 과정), 상속(코드의 재사용성이 증가하고, 클래스 간의 계층 구조를 형성), 다형성( 동일한 메서드명이지만 다른 동작을 수행할 수 있도록 하는 기능), 동적 바인딩(다형성을 지원하는 매커니즘)이 있다. Spring에서도 역시 MVC 구조는 @Controller, @Service, @Reposit..

Framework/Spring 2024.04.17

[Spring] Security 설정 클래스 생성(세션 Stateless)

일반적으로 아래 파일은 config 패키지 안에 생성하여 관리한다. JWT 환경에서 스프링 시큐리티를 실습하기 위해 간단히 보안 config를 설정했다. @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf((auth) -> auth.disable()); http .formLogin((auth) -> au..

Framework/Spring 2024.04.17

[Spring] DTO

정의 Data Transfer Object 프로세스 간에 데이터를 전달하는 용도의 객체 주로 서로 다른 시스템 간에 데이터를 전송할 때 사용 비즈니스 로직을 포함하지 않는 데이터를 전달하기 위한 단순한 객체 DTO는 데이터를 캡슐화하여 전송 시에 데이터의 무결성을 유지 데이터 전송의 효율성을 높임 사용 이유 스프링 부트와 같은 MVC 패턴에서는, 보통 클라이언트와 컨트롤러 사이에서 DTO의 필요성이 생긴다. 아래 User 도메인은 위 그림과 같은 흐름으로 사용자와 DB 사이에서 이동하게 된다. public class User { private String id; private String name; private String email; private String password; public User(..

Framework/Spring 2024.04.17

[Spring] 회원가입 코드 통해 스프링 구조와 흐름 복습하기

복기하는 내용은 각 코드 주석에 상세히 달아보면서 복습 필요한 의존성을 추가하고 스프링 부트 애플리케이션을 설정해야 하므로, build.gradle 또는 pom.xml 파일에 아래와 같이 의존성을 추가 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-thymeleaf 회원 엔티티를 추가 import javax.persistence.Entity; import javax.persistence.Gene..

Framework/Spring 2024.04.11

[Spring] Flyway DB 마이그레이션

DB 마이그레이션이란? 기존 데이터베이스의 스키마와 데이터를 새로운 버전 또는 구조로 이전하는 작업 데이터의 백업, 변환, 이동 등의 작업을 포함 데이터베이스 시스템을 업그레이드하거나 확장 데이터의 일관성과 무결성을 유지하고 새로운 데이터베이스 버전으로 전환 시스템의 안정성과 확장성을 유지 동작 흐름 Application Context → Flyway 실행 → 스키마 생성 → hibernate validation(검증) → 적합한 스키마 실행→ 애플리케이션 실행 완료 Flyway는 스프링에서 DB 마이그레이션을 관리하는 오픈소스 도구. 이를 스프링에 적용하기 위해 먼저 Dependency에 Flyway관련 내용을 입력한다. org.flywaydb flyway-core application.properti..

Framework/Spring 2024.04.11

[Spring] Java 프로젝트 빌드를 위한 Gradle과 Maven의 비교

파이썬에서는 pip, venv 등으로 프로젝트를 진행한다. 마찬가지로 자바에서도 이러한 프로젝트 빌드를 위한 도구들이 존재하는데, 대표적인 도구가 바로 Gradle과 Maven이다. Maven: Apache Maven은 Java 프로젝트 관리 도구로, XML 기반의 프로젝트 객체 모델(POM)을 사용한다. Maven은 중앙 저장소에서 의존성을 가져오고 라이브러리를 다운로드하여 빌드를 수행한다. Maven의 빌드 라이프사이클은 사전 정의된 단계로 구성되어 있으며, 사용자는 특정 단계에 플러그인을 연결하여 확장할 수 있다. Maven은 간단한 프로젝트 구조 및 관리 철학을 제공하며, 표준화된 디렉터리 구조를 권장한다. Gradle: Gradle은 Apache Ant와 Apache Maven의 장점을 결합한 ..

Framework/Spring 2024.04.09

테스트코드 외에 test%.py 명명 금지

$ python manage.py test accounts [Errno 2] No such file or directory: 'C:\\Users\\jmmas\\OneDrive\\BatangScreen\\Coding\\Project\\kiki-project-django\\kikiproject\\shortcuts\\management\\commands\\shortcuts.json' . . . AttributeError: module 'shortcuts.management.commands.test' has no attribute 'Command' (venv) 테스트코드를 작성하고, 테스트를 해보기 위해 명령어를 눌렀는데 위와 같이 문제가 생겼다. 이상해서 디렉토리를 들여다보니.. test.py가 이미 존재한 ..

Framework/Django 2024.03.19

소셜로그인에서 redirect uri는 왜 필요한가?

리디렉션(Redirection)은 웹 서버나 웹 애플리케이션이 클라이언트의 요청을 받았을 때, 해당 요청을 다른 위치로 전송하는 프로세스를 말한다. 즉, 클라이언트가 요청한 URL이나 리소스를 다른 URL이나 리소스로 이동시키는 것을 의미한다. 리디렉션은 보통 다음과 같은 상황에서 발생한다: 인증 및 인가 프로세스: 사용자가 로그인 페이지로 이동하여 인증을 완료한 후에, 시스템은 사용자를 인증된 페이지로 리디렉션한다. URL 재작성: 특정 URL에 대한 요청이 있을 때, 서버는 요청된 URL을 다른 URL로 리디렉션하여 요청을 처리합니다. 이는 웹 사이트의 구조 변경이나 특정 페이지의 이동 등에 사용된다. SEO (검색 엔진 최적화): 서버는 특정 URL에 대한 요청을 다른 URL로 리디렉션하여, 검색 ..

Framework/Django 2024.03.16

Django 테스트코드에서 setuptestdata, setup 함수의 차이

setUpTestData와 setUp은 Django의 테스트 케이스 클래스에서 사용되는 두 가지 메서드로, 각각 다른 목적과 사용 시점을 가지고 있다. def setUpTestData(cls) setUpTestData 메서드는 테스트 클래스 전체에서 단 한 번 호출되며, 테스트 데이터를 설정하는 데 사용된다. 모든 테스트 메서드가 공유하는 고정된 데이터를 설정할 때 주로 사용된다. 데이터베이스에 대한 변경이 필요한 경우에만 사용해야하며, 한 번만 실행되기 때문에 경량의 테스트 데이터를 설정하는 데 적합하다. 데이터베이스에 데이터를 추가, 수정, 삭제할 수 있다. def setUp(cls) setUp 메서드는 각각의 테스트 메서드가 실행되기 전에 호출되며, 특정 테스트 케이스에 필요한 초기화 작업을 수행하..

Framework/Django 2024.01.01

HTTP POST 요청 시 headers 매개변수

HTTP 요청에 헤더를 포함하는 것은 일반적으로 API 요청에서 사용자 인증이나 기타 정보를 전달하기 위한 표준적인 방법이다. Cloudflare API는 클라우드플레어 계정의 특정 작업을 수행하기 위해 사용자를 인증하는 데에 헤더의 Authorization 필드를 사용하고 있다. 아래 예시 코드를 작성하면서 공부하였다. class UserAvatarGetUploadURLView(APIView): def post(self, request): """GetUploadURL.post 사용자가 사진을 첨부해서 클라우드플레어에 전송하기전에 먼저 일회용 업로드 url을 요청합니다. Args: url (str): 클라우드플레어에서 미리 지정한 일회용 url 요청 링크 one_time_url (str): post요청이..

Framework/Django 2024.01.01