커스텀 어노테이션
·
Spring
커스텀 어노테이션을 정의하려면 @interface 키워드를 사용하여 새로운 어노테이션 타입을 생성한다. 어노테이션에는 주로 @Target과 @Retenttion 어노테이션을 사용하여 적용 대상과 유지 정책을 설정한다. 커스텀 어노테이션 정의하는 예로 @LoginUser라는 어노테이션을 예로 들겠다.@LoginUser 어노테이션은 메소드 파라미터에 적용되어 로그인된 사용자 정보를 주입하는 데 사용된다. 이 어노테이션은 런타임 동안 유지되며, 메소드 파라미터에만 적용될 수 있도록 설정한다. package com.sparta.newsfeed19.global.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retenti..
Could not write JSON
·
Spring/Spring 트러블 슈팅
유저 등록을 한 후 로그인을 받고 토큰을 받은걸 AUthorization에 토큰값을 넣어준 뒤 로그인 된 유저 정보 바탕으로 단건 다건 조회가 된다. 근데 post에서 request 정보 넣고 send를 했지만 해당 메세지가 뜬다. Could not write JSON: failed to lazily initialize a collection of role: com.sparta.newsfeed19.user.User.followerList: could not initialize proxy - no Session "이 에러 메시지는 Hibernate와 관련된 Lazy Loading 문제로, Session이 없는 상태에서 지연 로딩(Lazy Loading)된 엔티티를 초기화하려고 할 때 발생합니다. 구체적으로..
Edit Configuration을 통해 SQL DB로그인하기
·
Spring
같이 협업을 할때 테스트를 해보기 위해 보통 데이터베이스를 로컬로 놓는다. 그리고 보통 properties가 아닌 yml로 놓으면 이런식으로 입력하라고 뜬다. 보통은 이 자리에 자신의 SQL username하고 password를 입력하겠지만....문제점은 github에 push를 하고 다른 팀원들이 pull할시 나의 SQL username과 password 그리고 DB_NAME까지 남게된다.  몰론 더 이상 .yml을 만지지 않는 전제하에 .gitignore에 *.yml 추가하는 방법도 있지만 언제 버전 수정 할 순간도 있기에 굳이 추천하진 않는다.  그래서! 플레이 버튼 옆 Recent Configurations에서 Edit Configuartions으로 오면 DB_NAME에 스키마 명 입력하고 USE..
SNS 팀 프로젝트(1)
·
Spring/미니 프로젝트(뉴스피드)
뉴스피드 프로젝트이번 프로젝트에서는 Spring을 활용하여 협업 프로젝트를 진행하였다. 뉴스피드 기능을 포함한 SNS 애플리케이션을 개발할 예정입니다.뉴스피드란?친구들의 최신 게시물을 확인할 수 있는 페이지이다. 평소 유저분들이 자주 사용하는 인스타, 페북같은 SNS의 핵심 기능이라고 보면 된다.이번 진행할 팀에서는 이런식으로 개발 프로세스를 진행하였다.개발 프로세스 데이터베이스와 ORM데이터베이스 스키마 설계 -> ERD 통해 설계JPA를 통한 데이터베이스 연동 및 CRUD 작업 수행인증사용자 인증과 인가의 기본 원리 이해JWT 활용 -> 나중에 결정REST API기능에 맞는 REST API 설계 및 Spring Boot를 이용한 구현협업 및 버전 관리Git을 사용한 소스 코드 버전 관리브랜치를 이용한..
N:M(다대다 관계)
·
Spring
스프링 프레임워크에서는 다대다(Many-to-Many)관계를 사용하는 것은 데이터베이스 모델링의 중요한 부분 중 하나이다. 다대다 관계는 두 엔티티 간의 복잡한 상호작용을 관리할 때 유용하지만, 이를 올바르게 구현하고 이해하는 것이 중요하다. 다음은 스프링의 JPA에서 다대다 관계를 보다 상세하게 설명하겠다. 다대다 관계의 기본 개념다대다 관계는 두 개의 엔티티가 서로 다수의 인스턴스를 참조할 수 있는 경우를 말한다. EX) 학생(Student)와 강좌(Course) 간의 관계에서는 한 학생이 여러 강좌를 수강할 수 있고, 한 강좌에는 여러 학생이 등록 하루 수 있다. 데이터베이스에 모델링을 하기 위해 필요한 구조Student 테이블Course 테이블 다대다 관계 구현방법기본적인 다대대 관계에서는 JPA..
Spring boot을 활용한 일정 관리 프로젝트(2)
·
Spring/미니 프로젝트(뉴스피드)
저번 프로젝트에 이어서 일정 관리에 관한 기능에 이어서 댓글, 아이디, 페이지네이션, JWT를 활용한 로그인 기능이 추가 되었다. Github주소https://github.com/wanduek/mj-schedule GitHub - wanduek/mj-scheduleContribute to wanduek/mj-schedule development by creating an account on GitHub.github.com해당 깃허브 read.me에 API명세서와 ERD가 있으니 많관부 바랍니다!회고전에는 못했던 3Layer structure 구현에 성공하였으며 각 클래스와 메서드가 명확한 역할을 수행하고 있다. 예를 들면, JwtUtil은 JWT 관련 작업을, UserService는 사용자 관련 비즈니스..
1:N(일대다), N:1(다대일)
·
Spring
Spring에서는 1:N과 N:1관계는 객체 지향 프로그래밍에서 데이터베이스의 테이블 간 관계를 표현하는 방법이다. 주로 JPA(Java Persistence API)를 사용하여 Entity간의 관계를 매핑할 때 사용된다. JPA(Java Persistance API): 자바 애플리케이션에서 데이터베이스와 객체 간의 매핑을 관리하고 수행하는 표준 API이다.Entity: 데이터베이스 테이블에 대응되는 자바 클래스이다. 클래스의 각 필드는 테이블의 각 열과 매핑된다. 1:N(일대다)관계관계는 하나의의 엔티티가 여러 개의 다른 엔티티와 연관되어 있는 관계를 의미한다. EX) 하나의 (Team)이 여러 명의 Member를 가질 수 있는 상황이 있다. Team class@Entitypublic class Tea..
RESTful API
·
Spring
AWS에서 정의하는 RESTful API는?RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스입니다. 대부분의 비즈니스 애플리케이션은 다양한 태스크를 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신해야 합니다. 예를 들어 월간 급여 명세서를 생성하려면 인보이스 발행을 자동화하고 내부의 근무 시간 기록 애플리케이션과 통신하기 위해 내부 계정 시스템이 데이터를 고객의 뱅킹 시스템과 공유해야 합니다. RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원합니다.https://aws.amazon.com/ko/what-is/restful-api/ RESTful API란 무엇인..
Entity 연관 관계 1 대 1 관계
·
Spring
JPA에서 1대1(One -to-One)관계는 두 엔티티 간의 관계가 각각의 엔티티에서 하나의 인스턴스만을 가질 수 있음을 의미한다.정말 간단히 예를 들면, 한 사람(엔티티)은 하나의 여권(엔티티)만을 가질 수 있으며, 그 여권은 한 사람에게만 속할 수 있다. 1대1 관계 설정 방법 단방향 1대1 관계단방향 1대1 관계에서는 한 엔티티가 다른 엔티티를 참조한다. 예를들어 User 엔티티가 Profile엔티티를 참조한다고 가정해보자.@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; @OneToOne @J..
IOC(Inversion fo Control), DI(Dependency Injection)
·
Spring
IoC와 DI는 소프트웨어 개발에서 객체 간의 의존성을 관리하고 구조를 개선하는게 중요한 개념들이다.  IOC(Inversion of Control)IoC는 제어의 역전을 의미한다. 전통적인 프로그래밍에서는 프로그램의 흐름과 객체의 생명 주기를 개발자가 직업 제어한다. 그러나 IoC에서는 이러한 제어 권한을 개발자가 아닌 외부 시스템 또는 프레임워크가 맡게 된다.즉, IoC는 제어 흐름을 개발자가 직접 관리하는 대신, 외부에서 관리하게 하여 프로그램의 유연성을 높이고, 모듈화 및 테스트 용이성을 향상시킨다. IoC의 주요 형태 중 하나는 DI(Dependency Injection)이다. IoC를 사용하는 프레임워크나 컨테이너는 객체를 생성하고, 객체 간의 의존성을 주입하는 책임을 진다. DI(Depend..