분류 전체보기 149

[Springboot] Error creating bean with name ' Controller '

'Error creating bean with name ... ' 스프링 컨테이너가 빈(Bean)을 생성하는 동안 문제가 발생하면 나타나는 에러이다. 1. 잘못된 애노테이션을 사용한 경우 2. 필요로 하는 의존성을 제대로 주입받지 못하는 경우 3. 클래스가 프로젝트에 존재하지 않거나 잘못된 패키지에 위치해 있는 경우 보통 위와같은 실수로 인해 발생한다. 나는 @RestController를 사용해야 하는데 @Controller를 사용하여 발생했다. (@Controller = @RestController에 @ResponseBody가 빠진 것) 이후에 비슷한 에러가 발생했다. Error creating bean with name 'entityManagerFactory' 이번에는 @Entity를 빼먹어서 에러가..

TroubleShooting 2023.07.07

[Springboot] 관계 매핑(ORM; Object Relational Mapping) N:M

외래키의 주인은 1:N, N:1에선 1이고 N이 가지고 있는다. N:M 직접 연관을 맺으면 안된다. 가운데에 테이블을 하나 더 생성하여 테이블을 거쳐 관계를 맺어야 한다. N : 1 : M 형식이 된다 예시: 여러 메뉴(N)를 가지는 식당과 여러 손님(M) 사이의 주문(1) 중간 테이블인 Order테이블 @ManyToOne @JoinColumn(name = "user_id") private User user; @JoinColumn: 외래키를 매핑할 때 사용. 저장시 user_id라는 릴레이션(튜플)에 저장한다. users(손님) 테이블 @OneToMany(mappedBy = "user") private List orderList = new ArrayList(); mappedBy: 타겟 엔티티(Order)..

Springboot 2023.07.07

[H2]Syntax error in SQL statement ... expected "identifier"; SQL statement:

내가 발생한 에러코드 Syntax error in SQL statement "\000d\000a create table [*]user (\000d\000a id bigint generated by default as identity,\000d\000a nickname varchar(255),\000d\000a password varchar(255),\000d\000a primary key (id)\000d\000a )"; expected "identifier"; SQL statement: 이것도 H2를 첫 사용할 때 발생한 에러였다. H2는 에러가 발생된 부분은 [*]로 표시하여 어디서 에러가 발생햇는지 알기 쉬웠다. 내가 에러가 발생한 부분은 create table user에서 user 부분이었다. 찾..

TroubleShooting 2023.07.07

[H2], [Springboot] JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password

평소에는 MySQL만 사용하다가 처음으로 H2를 사용해봤다. JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password 에러가 발생하여 찾아보니 스프링부트 2.4부터는 `spring.datasource.username=sa` 꼭 추가해주어야 했다. username을 root로 하여 진행하려고 `spring.datasource.username=root`로 작성하여 발생한 사소한 에러였다.

TroubleShooting 2023.07.07

[Network] HTTP/HTTPS의 차이, SSL/TLS이란?

HTTP/HTTPS HTTP와 HTTPS는 클라이언트와 서버 간 통신에 사용되는 프로토콜이다. 프로토콜이란 컴퓨터나 디지털 장치 등 다양한 기기간에 통신하기 위한 규칙과 규약이다. 사용자의 요청(주소창에 URL을 입력하거나 웹 페이지의 링크를 클릭 등) 시, 브라우저는 해당 URL로 서버에 요청(Request)을 보낸다. 이 요청을 HTTP 또는 HTTPS 프로토콜을 사용하여 이루어진다. HTTP HTTP (HyperText Transfer Protocol): 텍스트 기반으로 데이터를 전송하며 보안 기능이 없는 평문 통신 방식이다. 중간에 제3자가 데이터를 가로채거나 조작할 가능성이 있다. 80번 포트를 사용하여 데이터를 전송한다. HTTPS HTTP에 SSL/TLS을 사용하여 데이터를 암호화하여 안전하..

CS 2023.07.05

[Springboot] 인증 및 인가를 이용한 게시판 CRUD

문제 Security를 이용해 게시판 만들기 1. 로그인 한 유저라면 게시글 작성, 자신의 게시글 수정 및 삭제 2. 로그인하지 않은 유저라도 읽기 가능 을 구현함에 있어 모든 글이 인증을 요구하게 되어 2번을 구현하는 데에 어려움을 겪었다 시도 조회 url에 search를 포함시킨 후 AuthFilter에 if문을 추가해 url에 search가 포함되어 있다면 인증을 필요 없이 진행시키도록 했다. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (Htt..

TroubleShooting 2023.07.03

[WIL] Week 3

Fact: 있었던 일 1. Springboot를 사용하여 게시판 CRUD 구현 2. jwt, security를 사용하여 회원가입 및 login 구현 Feeling: 느낀점 CRUD 구현에는 큰 어려움이 없어 재미있었다. 로그인 기능을 구현하기 위한 security, jwt의 개념을 이해하는데 어려움을 느꼈다. Finding: 알게된 것 JPA(Java Persistence API)의 프레임워크(Hibernate)를 이용한 Java-DB를 연결하는 방법 JWT(json web token) 생성부터 전달까지의 흐름 및 코드 작성법 usernamePasswordAuthenticationFilter를 이용하여 내부 인증을 처리하는 방법 및 동작방식 @Vaild를 이용하여 Dto 또는 Entity의 값을 제한하는..

TIL, WIL 2023.07.02

[Springboot] Security

어제 Security가 Controller보다 먼저 실행된다는 것을 알았다. 하지만 오늘 직접 코드를 구현해 봄으로써 어떻게 Controller 이전에 Security가 올 수 있는지 확실히 알지 못했기에 login 기능을 구현하는데에 어려움을 겪었다. 찾아보던 도중, 좋은 notion글이 있어서 참조했다. Spring Security 인증(Authentication): 해당 사용자가 본인이 맞는지 확인하는 과정 hyeonjunju.notion.site 클라이언트가 정보를 요청하면 AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 토큰을 생성한다. AuthenticationFilter 예시코드 public Authentication attemptAuthentication(Htt..

Springboot 2023.07.01

[Springboot] Filter와 Spring Security

Spring에서 모든 호출은 DispatcherServlet을 통과하게 되고 이후에 각 요청을 담당하는 Controller로 분배된다. 이때, 각 요청에 대해서 공통적으로 처리해야 할 필요가 있을 때 DispatcherServlet 이전에 단계가 필요하며 이것이 Filter다. Spring Security도 인증 및 인가를 위해 Filter를 사용하며 FilterChainProxy를 통해서 상세로직을 구현한다 Spring security에서 제공하는 인증방식: Form login Form Login 기반 인증: 인증이 필요한 URL 요청 시 인증되지 않았다면 로그인 페이지를 반환하는 구조 내부에서 인증을 처리할 때 가장 많이 사용되는 방식으로 usernamePasswordAuthenticationFilt..

Springboot 2023.06.30

좋은 개발자란? 좋은 개발자가 되기 위해서 해야할 것

개발 공부를 시작한 지 얼마 되지 않아 개발 강의에만 집중하고 구현하는 것에만 몰두하고 있었다. 그러나 김태선 튜터님의 말씀을 듣고, 효율적인 개발 공부방법 뿐 아니라 개발자로서의 필요한 중요한 것들을 많이 알 수 있었다. 1. 메타인지 메타인지란 우리가 무엇을 알고 있는지, 모르는 것이 무엇인지를 알아가는 것이다. 아는 것보다 모르는 게 뭔지 아는 게 더 중요하다 자신이 어떤 것을 알고 있는지 정확하게 인식하는 것도 매우 중요하다 메타인지는 개인의 메타인지 뿐 아니라 조직의 메타인지도 있으며 이를 높이기 위한 방법들을 알려주셨다. 개인이 메타인지를 높이기 위한 방법 1. 업무의 핵심적인 질문만 하기 2. 내가 맡은 업무의 배경을 조사하고, 그 배경을 만들어 낸 원인이 무엇인지 파악하기 3. 업무 주체에..

TIL, WIL 2023.06.30