오늘은 팀 프로젝트에서 댓글 기능을 구현하는 작업을 하였다. 댓글 컨트롤러와 엔드포인트 설정: 댓글 기능을 처리하기 위해 ReplyController를 작성하고, 댓글 조회, 작성, 수정, 삭제와 관련된 엔드포인트를 설정했다. @RestController @RequestMapping("/api") @RequiredArgsConstructor public class ReplyController { // ... (생략) } 댓글 엔티티 설계: 댓글의 내용(content), 소속 카드(card), 작성자(user) 정보를 담을 Reply 엔티티를 설계하였다. @Entity @Table(name = "reply") public class Reply extends Timestamped { @Id @Generate..
Spring
오늘은 스프링(Spring) 프레임워크에서 빈(Bean)의 스코프에 대해 학습하였다. 싱글톤(Singleton) 스코프: 싱글톤 스코프는 스프링 컨테이너 내에서 해당 빈의 인스턴스가 하나만 생성되고, 여러 곳에서 공유하여 사용되는 스코프이다. 기본적으로 모든 빈은 싱글톤 스코프로 생성된다. 스프링 컨테이너가 시작될 때 해당 빈의 인스턴스가 생성되며, 컨테이너가 종료될 때 소멸된다. 프로토타입(Prototype) 스코프: 프로토타입 스코프는 빈의 인스턴스가 요청할 때마다 매번 새로운 인스턴스가 생성되는 스코프이다. 이는 각각의 요청 또는 사용마다 독립적인 인스턴스를 생성하고자 할 때 유용하다. 스프링 컨테이너는 프로토타입 빈을 생성하고 주입하며, 프로토타입 빈을 사용한 클라이언트는 해당 빈을 직접 관리해야..
오늘은 스프링부트에 뷰.js를 설치하고 연동해보는 시간을 가져보았다. 우선 스프링부트 프로젝트를 설치하는건 넘기고 Vue.js를 설치하는 단계부터 한다. 인텔리제이 기준으로 설명하겠다. 우선 인텔리제이 상에서 터미널을 킨다. 그리고 이코드를 입력한다. npm install -g @vue/cli 참고로 npm과 node.js가 설치가 되어있어야한다. 설명은 vue-cli를 글로벌하게 설치하겠다는 의미이다. 설치가 완료되고나면 vue --version쳐보면 버전이 나올것이다. 그러고 난뒤 vue.js를 프로젝트안에 설치할것이다. 이 줄을 입력하자. vue create frontend 프로젝트안에 frontend라는 이름의 vue 프로젝트를 설치하겠다는 뜻이다. 또한 뷰 버전을 어떤걸로 고를것인지 뜰것이다. ..
오늘은 스프링 부트를 생성할 때 자동으로 생성되는 라이브러리와 터미널을 통해 ./gradlew build와 java -jar를 실행하여 서버를 직접 작동해보는 과정을 배웠다. 나중에 AWS EC2 같은 가상환경에서 실행해볼 수 있기에 실습하면 좋을것이다. 스프링 부트 생성 라이브러리: 스프링 부트 프로젝트를 생성할 때, 자동으로 생성되는 라이브러리들에 대해 알아보았다. 스프링 부트 프로젝트는 Maven 또는 Gradle 빌드 도구를 사용하여 생성할 수 있는데, 기본적으로 다음과 같은 라이브러리들이 생성된다. Spring Boot Starter Web: 웹 애플리케이션을 개발하는 데 필요한 Spring Web, Spring MVC 등의 모듈을 포함한다. Spring Boot Starter Test: 단위 ..
오늘은 스프링부트에서 JSP를 사용하는법에 대해서 글을 작성하고자한다. 스프링부트에서는 이제 JSP를 사용하지않고 Thymeleaf를 공식적으로 지원하고있다. 하지만 국내에선 JSP를 사용하는 곳이 많고 나 또한 JSP를 사용해보고 경험을 해보고 싶었기에 방법을 찾고 적용해보았다. 우선 빌드는 Gradle을 기준으로 설명한다. 프로젝트를 생성하고 타입은 Gradle - Groovy를 선택후 패키지 생성은 Jar이 아닌 War을 사용하여 생성한다. 그리고 종속성은 Spring Web과 Lombok을 선택후 프로젝트를 생성한다. 생성후 Bulid.gradle로 들어가 dependencies 안에 4줄을 추가한다. implementation 'org.apache.tomcat.embed:tomcat-embed-..
오늘 프로젝트를 진행하면서 최근 비밀번호 3번을 기억한후 그 비밀번호로 바꾸려하면 변경이 불가능하게 만드는 메서드를 짜봤다. 우선 엔티티에 최근 비밀번호 3개를 담을 어레이리스트를 생성한다. @ElementCollection @CollectionTable(name = "previous_passwords", joinColumns = @JoinColumn(name = "users_id")) @Column(name = "password") private List previousPasswords = new ArrayList(); RDB에서는 컬렉션 형태의 엔티티는 저장할 수 없다. 그렇기에 별도의 테이블을 생성해줘야 한다는것을 알려줘야하는데 그것을 해주는 어노테이션이 @ElementCollection이다. 그리..
오늘은 Spring Boot에서 OAuth2를 구현하는 방법에 대해 학습했다. OAuth2는 사용자 인증 및 인가를 위한 개방형 표준 프로토콜로, 외부 서비스(소셜 미디어, 클라우드 서비스 등)의 인증 기능을 애플리케이션에 통합하는 데 사용된다. Spring Boot에서 OAuth2를 구현하기 위해 다음과 같은 단계를 거친다. 의존성 추가: Spring Security와 OAuth2 클라이언트 관련 의존성을 프로젝트에 추가한다. 소셜 애플리케이션 등록: OAuth2를 사용할 서비스 제공자(소셜 미디어 등)에서 애플리케이션을 등록하고 클라이언트 ID와 클라이언트 시크릿을 발급받는다. Spring Security 구성: SecurityConfig 클래스를 작성하여 Spring Security를 구성한다. O..
오늘은 Thymeleaf라는 템플릿 엔진에 대해 학습하였다. Thymeleaf는 서버 사이드 Java 템플릿 엔진으로, HTML, XML, JavaScript, CSS 등 다양한 마크업 언어를 처리할 수 있다. Thymeleaf의 주요 특징: 자연스러운 템플릿: Thymeleaf는 템플릿 파일을 일반적인 마크업 문서로 유지할 수 있게 해준다. 템플릿 파일은 HTML 코드의 형태를 그대로 유지하면서 동적인 데이터를 삽입할 수 있다. 서버 사이드 렌더링: Thymeleaf는 서버 사이드에서 동작하는 템플릿 엔진이기 때문에, 서버에서 동적으로 HTML을 생성하여 클라이언트에 전달한다. 이를 통해 동적인 데이터를 포함한 HTML 페이지를 생성할 수 있다. 간편한 템플릿 변수 사용: Thymeleaf는 템플릿 변..