분류 전체보기 149

[TIL] SQLsyntaxerrorexception

이번 프로젝트로 인해 물물교환 사이트를 만들고 있었다. 왜 에러가 발생하는지 모르겠다. 이상한 점이라면 원래 상품테이블, 이미지 테이블이 생성되어야 하는데 이미지 테이블만 생성되었었다. 물물교환의 특성상 중고상품이 많이 나올것이기에 물품의 상태를 표시하기 위해 condition이라는 변수명을 사용했었다. 하지만 condition이 SQL의 예약어라 물품의 테이블이 생성되지 못했던 것이다! 이후 goodsCondition으로 변경하니 잘 진행됐다.

TIL, WIL 2023.08.02

[CS] 쿠키와 세션의 차이

쿠키(Cookie) 클라이언트에 작은 데이터 조각을 저장하는 방식이다. 클라이언트에 저장되므로 클라이언트가 직접 수정할 수 있으며 보안에 비교적 취약하다. 주로 비밀번호, 로그인 상태 유지 등의 기능을 구현하는데 사용한다. 서버에서 일정 시간이 지나면 삭제되도록 설정한 암호화된 토큰으로 개인정보를 저장하여 사용한다. 각 도메인당 쿠키의 개수와 총 저장 용량에 제한이 있다. 세션(Session) 서버에 사용자 상태 정보를 저장하는 방식이다. 서버는 클라이언트 요청 시 고유한 세션 ID를 생성하고, 이를 쿠키를 통해 클라이언트에게 전송한다 로그인 정보, 장바구니 내역, 사용자 정보 등 사용자 상태를 유지하는데 사용한다. 쿠키와 달리 세션 데이터는 서버에 저장되므로 클라이언트가 직접 수정할 수 없고, 보안상 ..

CS 2023.08.01

[Springboot] S3에 이미지 올리기

S3에서 버킷 생성 및 IAM 설정을 완료한 후 작성해야 한다. gradle.build implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' application-security.properties # mySql spring.datasource.url=jdbc:mysql://localhost:3306/{DB명} spring.datasource.username={유저이름} spring.datasource.password={패스워드} #AWS S3 cloud.aws.credentials.accessKey={엑세스키 입력} cloud.aws.credentials.secretKey={시크릿키 입력} cloud.aws.s..

Springboot 2023.08.01

[Springboot] UnsatisfiedDependencyException

처음보는 에러가 발생해서 찾아봤다. UnsatisfiedDependencyException은 빈 객체 생성 과정에서 의존주입을 하게 되는데, 필드에 해당하는 의존관계를 만족시킬 수 없을때 발생하는 예외였다. 에러코드를 읽어보니 imageRepository가 JPA의 관리 대상이 아니라서 발생한다고 했다. JpaRepository의 제네릭 타입은 Entity 클래스와 해당 Entity의 기본키(PK) 타입이어야 한다. (ex: JpaRepository) 하지만 자세히 몰랐었기에 여러 이미지를 리스트에 넣은 후 저장하고 싶어서 JpaRepository 로 생성했기에 발생했던 에러였다. 이후에 추가적으로 수정하여 무사히 작동하였다.

Springboot 2023.08.01

[CS] TDD(Test-Driven Development)란?

TDD(Test-Driven Development) TDD는 테스트 주도 개발이라고도 불린다. 테스트 코드를 작성하고 이를 통과하는 최소한의 코드를 작성한 후에 리팩토링하는 과정을 반복하여개발하는 방식이다. 1. 기능 코드를 작성하기 전에 테스트 코드를 먼저 작성하여 테스트 하는 것이 핵심 원칙이다. 2. 보통 단위 테스트로 진행한다. 3. 테스트를 통과할 수 있는 최소한의 코드만 작성하여 기능이 작동하는지 검증한다. 4. 기능이 작동하는 것을 확인 후 코드 구조 개선 및 중복 제거 등 작업을 수행하는 리팩토링을 진행한다. 장점 1. 코드 품질 향상: 각 기능에 대한 테스트를 보장하므로 코드 품질이 높아지며 버그를 발견하기 쉬워진다. 2. 신뢰성 확보: 테스트를 통과한 기능은 정상적으로 동작한다는 확신을..

CS 2023.07.31

[WIL] week 7

Fact: 학습내용 이번주는 pinterest를 클론코딩 하였다. 저번주 프로젝트에서는 security쪽을 담당했었지만, 관계 부분을 해보고 싶었기에 이번주는 댓글 및 대댓글 CRUD, 좋아요 버튼과 globalException을 구현하였다. Feeling: 느낀 점 1. 관계에 대해 강의를 통해 배웠었지만 실제로 사용해보니 헷갈리는 것도 많고 어려웠다. 2. 대댓글을 구현할 때에 댓글과의 관계를 설정할 때에 힘들었지만 정상적으로 구현되었을 때에 기분이 너무 좋았다. Finding: 알게 된 것 1. OneToMany의 한계점 및 ManyToOne의 장점(https://developerhun.tistory.com/110) 2. customException을 사용하는 이유는 예외명을 직관적으로 만들어 예외..

TIL, WIL 2023.07.30

[Springboot] OneToMany VS ManyToOne

Springboot에서 관계는 1:1, 1:N, N:1, N:M 관계가 있다. 이 중 OneToMany는 1:N을, ManyToOne은 N:1을 표현하는 어노테이션이다. 이 두개는 외래키의 위치가 다르며 게시글과 댓글로 예를 들자면 OneToMany는 게시글 안에 댓글을 포함시키는 것이고 외래키는 댓글이 가지게 된다. ManyToOne은 댓글이 하나의 게시글을 참조하는 것(가리키는 것)이며 외래키는 게시글이 가진다. OneToMany 외래키를 N에서 관리하지만 1에서 N쪽을 제어(CRUD)할 수 있기에 헷갈릴 수 있다. 테이블의 특정 레코드 삭제 및 업데이트시 모든 레코드를 확인해야 하는 문제가 발생할 수 있다. 연관관계 관리를 위해 추가로 UPDATE SQL이 실행된다 OneToMany 외래키를 1에서..

Springboot 2023.07.30

[CS] 정규화 및 반정규화

정규화: 잘못 설계된 관계형 스키마를 쪼개어 바람직한 스키마로 만들어 가는 과정 DB 논리적 설계단계에서 수행 수준이 높을수록 유연한 데이터 구축, 정확성 상승, 물리적 접근이 복잡, 조회 성능이 저하 정규화의 목적 : 단순화, 무결성, 안정성 어떠한 릴레이션이라도 DB 내에서 표현 가능 효과적인 검색 알고리즘 생성 가능 중복배제, 저장공간의 최소화 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄임 정규화를 거치지 않을 시 데이터들이 불필요하게 중복되는 현상인 이상(Anomaly)이 발생할 수 있다. 삽입 이상 : 삽입 시 원하지 않은 값들도 함께 삽입되는 현상 삭제 이상 : 삭제 시 상관없는 값들도 함께 삭제되는 현상 갱신 이상 : 갱신 시 일부분만 갱신되어 정보에 모순이 생기는 현상 정규화의 원칙 스..

Springboot 2023.07.29

[springboot] 07-21 ~ 07-27

이번주는 바빠서 TIL을 많이 쓰지 못하였기에, 프로젝트 진행 간 발생했던 에러들을 모아서 작성하려고 한다. 1. NullPointException: ... "this.logger" is null log사용 시 Slf4j가 아닌 invoke를 import해서 발생한 에러. 이후에 slf4j를 호출하여 해결했다. 2. RuntimeException: ... Not Found email을 PK로, username을 UK 지정했었다. 협업 진행 시 서로간 의견이 원활히 전달되지 않아 email - username을 서로 비교하는 코드가 작성되었다. 당연히 어떤값을 넣더라도 NotFound가 발생했다. 이후에 email로 비교하기로 협의하여 수정하였다. 3. ApplicationContextException m..

Springboot 2023.07.27

[WIL] week 6

Fact: 학습내용 이번주는 미니 프로젝트를 진행했다. 로그인 및 회원가입 부분을 담당했으며, RefreshToken을 사용하여 AccessToken을 재발급 하는 기능을 구현했다 Feeling: 느낀 점 1. 처음으로 강의에서 나오지 않은 기능을 찾아보며 직접 만들었기에 무사히 구현됐을 때 성취감이 매우 컸다. 2. 로그인이라는 기능이 이정도로 복잡할 줄은 몰랐다. 3. 기능구현도 쉽지 않았지만, 협업 진행간 크고작은 에러들 때문에 더욱 힘들었다. Finding: 알게 된 것 1. RefreshToken을 통한 AccessToken의 재발급 방법 2. Intellij와 Redis의 연동방법 3. 프로젝트 시작 전 명세의 중요성 3. 팀 프로젝트간 소통과 피드백의 중요성 Future: 알게된 것을 어떻게..

TIL, WIL 2023.07.23