토이 프로젝트 3(Spring boot와 Fast API 연결하기)
·
카테고리 없음
연동하면서 있었던 문제점 CORS를 양쪽에서 풀어주어야 함.  1. CORS 문제의 원인CORS 문제는 기본적으로 서로 다른 도메인, 포트, 또는 프로토콜 간의 요청이 발생할 때 브라우저가 이를 보안 상 막으려 하기 때문에 발생합니다. 예를 들어:Spring Backend: http://localhost:8080FastAPI Backend: http://localhost:8000두 서버가 서로 다른 도메인/포트를 사용하므로, 브라우저에서 FastAPI가 Spring 서버에 요청을 보낼 때 CORS 문제가 발생할 수 있습니다.2. 해결 방법(1) Spring에서 CORS 설정Spring에서 CORS를 허용하려면 @CrossOrigin 애너테이션 또는 전역 설정을 추가해야 합니다.a. 특정 컨트롤러/메서드에..
로그인 횟수 제한 구현
·
토이 프로젝트 2
1. LoginController@PostMapping("/login")public String login(@Valid @ModelAttribute("loginDto") LoginDto loginDto, BindingResult result, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception { log.debug("Received LoginDto: {}", loginDto); log.debug("Email: {}, Password: {}", loginDto.getEmail(), loginDto.getPassword()); model.addAttribute("loginDto", log..
Interceptor(권한) 구현
·
토이 프로젝트 2
권한 구현이라고 작성하긴했지만 완벽한 권한을 제한할 수있는 것은 아님.UrlMapping을 할 때 /admin이 붙어있는 주소에는 memberType이 ADMIN인 사람만 접근할 수 있는 기능을 구현하기 위함이다. 1. 설정 파일 생성.package com.example.bravobra.config;import lombok.RequiredArgsConstructor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRe..
커스텀 어노테이션 추가, ExceptionHandler 추가
·
토이 프로젝트 2
Dto에서 @Email과 같이 어노테이션으로 유효성검사를 하는데 닉네임에 관한 어노테이션이 없어서 직접 만들어보았다. 커스텀 어노테이션을 만들기 위한 순서는 먼저1. Validator 클래스를 만든다. Validator는 Repository를 통해서 닉네임이 있는지 없는지 확인한다.2. @interface를 만든다. default 메시지를 설정해줄 수 있다.  1.UniqueNickName 어노테이션 package com.example.bravobra.validation.annotation;import com.example.bravobra.validation.validator.UniqueNicknameValidator;import jakarta.validation.Constraint;import jaka..
회원가입시 비밀번호 암호화(bCrypto)
·
토이 프로젝트 2
참고 : 회원가임 화면 구현 게시물에는 온전히 구현한 것이 들어가 있음. 비밀번호를 암호화하기 위해서는 Security의 BCryptPasswordEncoder를 사용해야함. 때문에 build에 의존성을 주입.implementation 'org.springframework.security:spring-security-crypto' // 암호화 추가 또 비밀번호가 일치하는지 확인하기 위해서 아래처럼 .matches를 써주어서 확인해주어야 함.public Member login(String loginEmail, String password) { // 이메일로 사용자 검색 return memberRepository.findByEmail(loginEmail) .filter(memb..
JPA 간단정리(PersistencContext, 연관관계, 주의점 등)
·
카테고리 없음
@Setter와 @Builder의 차이
·
카테고리 없음
발생한 문제점이번 프로젝트 간에는 @Setter를 쓰지말고 @Builder를 쓰기로 했다.그런데 PostMapping을 하면서 에러가 발생했다.  클라이언트에서 요청값을 읽어올 때 databinder에서 setter를 찾아서 값을 검증하고 변환하는데 setter가 없기에 null값이 오는 것이였다. 그래서 @Setter말고 @Builder를 사용할 때에는 @AllArgsConstructor 어노테이션을 붙여서 모든 생성자를 만들게 하여 생성자를 통해서 값을 주입하는 것으로 해결! 또 @Setter를 썼을 떄는 무엇때문에 어디서 Setter를 사용했는지 알기가 힘들다고하여 지양하는편이라고 하는데 프로젝트 끝나고 정리하면서 다시 공부해보자.
회원가입화면 만들기
·
토이 프로젝트 2
이번 프로젝트의 목표는 Spring의 기본 CRUD 감을 익히는 것이 목표이다. 때문에 Spring Security를 사용해볼 수도있겠지만 단계적으로 나아가야한다고 생각하여 가장 기본적인 것부터 실습. 추후 목표.1. JavaScript를 활용하여 유효성 검사2. Model이 아닌 JSON형식으로 구현해볼것(@RestController 사용)3. 타임리프대신 리액트를 활용하여 구현. 현재 해야할 것이 많지만 너무 조급해하지말고 천천히 하자. 1.MemberControllerpackage com.example.bravobra.controller;import com.example.bravobra.dto.MemberDto;import com.example.bravobra.dto.request.FindPassw..
JPA(간단정리)
·
카테고리 없음
JPA 간단하게 정리 Repository 설계하기 Spring Data JPA에서는 엔티티 매니저를 직접 이용해 코드를 작성하지 않아도 됨.대신 Data Access Object의 역할을 하는 Repository 인터페이스를 설게하여 사용. JpaRepository를 상속받는 Repository를 작성 2개의 제네릭 타입을 사용 후 첫 번째에는 엔티티 타입 클래스를 두 번째는 기본키 타입을 넣어줌. save 메소드void delete(T entity)count()Iterable findAll() @SpringBootTest@TestPropertySource@Autowired@DisplayName 쿼리메소드 89(p.g 참고) @Query  어노테이션@Param 어노테이션을 활용하여 파라미터로 넘어온 값을..
Spring의 정석 정리(1)
·
카테고리 없음
톰캣이 HttpServletRequest 객체를 만든다. 이곳에 요청한 정보를 답는다톰캣이 main 메서드 매개변수로 넘겨줌 클라이언트 : 서비스를 요청하는 애플리케이션서버 : 서비스를 제공하는 애플리케이션 WAS : 웹 애플리케이션을 서비스하는 서버WEB Server : Web을 서비스Web Application Server : Tomcat의 내부구조 Thread Pool : 쓰레드들을 미리 만들어 두었다가 요청이 오면 이 중에 하나의 쓰레드가 맡아서 요청을 처리Server(Tomcat)안에 Service가 있고 Service안에 실제로 서비스를 처리하는 Engine이 있다. Context : 하나의 웹 애플리케이션Servlet : Context안에 서블릿이 존재한다. 서블릿은 작은 서버 프로그램이라는..