본문 바로가기
반응형

전체 글123

spring 프로젝트에서 더미 데이터 사용 & 테스트용 fixture 사용하기 spring 프레임워크를 이용하여 프로젝트를 진행하다 보면 만든 코드가 정상적으로 동작하는지 확인할 필요가 있습니다.이때 테스트 코드를 이용하여 비즈니스 로직이 잘 작동하는지, Controller 부분이 정상적으로 동작하는지 확인하는 것도 중요하고 실제로 요청을 보냈을 때도 테스트 결과와 같이 의도한 대로 잘 동작하는지 확인하는 것이 필요합니다.이번 포스트에서는 개발 환경에서 실제 api 요청을 보냈을 때 응답을 위한 데이터를 넣는 방식과 테스트 코드를 위한 데이터를 넣는 방식에 대해서 다루도록 하겠습니다.DB에 더미 데이터 넣기서버를 작동시킨 후 실제 요청에 맞는 데이터를 응답으로 보내주기 위해서는 DB에 실제로 데이터를 넣어야 합니다.이때 서버를 실행시킨 다음에 sql을 이용하여 DB에 데이터를 넣어.. 2024. 6. 16.
spring security 적용시 @WebMvcTest 코드에서 csrf() 없애기 이번 포스트에서는 프로젝트에 spring security 적용에 따른 Controller 단위 테스트에서 겪었던 문제 상황을 해결하는 과정에 대해서 다루도록 하겠습니다.spring security를 적용하면서 테스트 코드에서도 변경이 필요했습니다.테스트 코드는 spring security의 범위에서 제외를 하거나 각각의 controller 단위 테스트에서 authentication을 임의로 만들어주는 해결 방법이 존재했고 이 중에서 authentication을 만들어주는 방식을 선택하였습니다.위와 같이 선택한 이유는 controller에 대한 단위 테스트는 실제와 같은 요청이 들어오는 것을 확인하고 이에 대한 응답이 제대로 내려가는지 확인하는 것이 중요하다고 생각하여 spring security를 테스트.. 2024. 6. 6.
java에서의 static의 의미와 사용법 우선 static의 사전적 의미는 '정적', '고정된'이라는 것입니다. java에서 static은 정적이라는 키워드로 자주 사용되고 static method(정적 메서드), static field(정적 변수)로 주로 사용됩니다. 이 두 가지 사용법은 instance가 아니라 class에 고정된 함수와 변수로 사용됩니다. 지금부터 이 두 가지에 대해서 자세히 알아보도록 하겠습니다.JVM Runtime Data Area위의 그림은 JVM을 나타내는 그림입니다. 간단히 설명을 드리면 .java 확장자를 가진 java source 파일을 java 컴파일러가 컴파일하여. class 확장자를 가진 class 파일로 만든 다음 이 class 파일을 class loader가 필요할 때 loading 하여 runtime.. 2024. 5. 18.
자바에서 PECS란? PECS란 Producer Extends Consumer Super의 줄임말입니다. 이를 직역하면 Producer 역할을 맡을 때는 extends를 사용하고 Consumer의 역할을 맡을 때는 super를 쓴다는 말입니다. 위에서 언급한 Producer 역할과 Consumer의 역할을 맡는 개체는 Collection에 해당합니다. extends와 super는 자바의 키워드로 상속 관계에서 자신을 상속한 타입인지, 자신의 부모 타입인지를 나타냅니다. 지금부터 PECS가 무엇인지 자세히 알아보도록 하겠습니다. 우선 PECS를 이해하기 위해서는 자바 제네릭스와 wildcard에 대한 개념을 이해해야 합니다. 우선 자바 제네릭스란 하나의 메서드나 클래스에서 여러 종류의 타입을 받아서 공통으로 쓸 수 있게 하는 .. 2024. 3. 20.
트랜잭션 격리 수준 트랜잭션이 가져야 하는 특성으로는 ACID가 존재합니다. 우선 이에 대해서 간략히 살펴보도록 하겠습니다. A(Atomicity) 원자성을 의미합니다. All or Nothing으로 하나의 트랜잭션은 내부에서 하나의 실패라도 발생한다면 전부 실패한 것으로 보고 트랜잭션이 시작하기 이전의 상태로 복구해야 합니다. Spring에서 java를 이용하여 트랜잭션을 진행할 때 RuntimeException이 발생하거나 rollbackFor 옵션을 주어서 해당 Exception이 발생했을 때 commit을 하지 않고 rollback을 진행하는 것이 이러한 특성을 지키기 위한 것입니다. C(Consistency) 일관성을 의미합니다. 트랜잭션에 의해서 데이터의 일관적인 상태가 바뀌면 안 된다는 것을 의미합니다. 데이터.. 2024. 3. 18.
N + 1 문제와 해결 방법 N + 1 문제가 무엇인지와 그 해결 방법에 대해서 알아보도록 하겠습니다.우선 N + 1이 일어나는 상황을 만들기 위해서 ERD와 스프링 프로젝트를 생성해 보도록 하겠습니다.팀에 여러 명의 팀원이 속할 수 있고, 이 각각의 팀원이 여러 개의 게시글을 쓸 수 있는 상황을 가정하여 ERD를 설계하였습니다. 이제 이에 맞는 스프링 프로젝트를 생성해 보도록 하겠습니다.아래는 순서대로 팀, 유저, 게시글의 엔티티입니다.@Entity@Table(name = "team")@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) .. 2024. 2. 14.
AWS ec2 + rds 이용 스프링 프로젝트 배포 (4) - 스프링 프로젝트 배포 이전 포스트에서까지 ec2와 rds를 이용하여 배포할 서버를 준비하는 과정을 실습하였습니다. 이제 제가 만든 스프링 프로젝트를 배포하고 postman을 이용하여 제대로 동작하는지 테스트를 진행해보도록 하겠습니다. 우선 로컬 환경에서 작동하던 프로젝트를 ec2 서버에 올리기 위해서는 application.properties나 application.yml에 있는 DB 연동 정보를 수정해주어야 합니다. 아래의 그림에서 url에서 하얗게 칠해진 부분에는 DB의 엔드포인트를, password에는 이전 포스트에서 rds의 비밀번호로 설정해둔 값을 넣습니다. 그 후 우측의 gradle을 열어서 bootjar를 더블 클릭해주면 jar 파일이 생성이 됩니다. 위와 같이 jar 파일을 만든 뒤 다시 ec2 서버로 접속을 .. 2024. 1. 22.
AWS ec2 + rds 이용 스프링 프로젝트 배포 (3) - rds 설정 이번 포스트에서는 rds를 설정하여 mysql과 ec2 서버를 연동해보겠습니다. 우선 아래의 그림과 같이 aws에서 rds를 검색하여 rds 서비스로 들어가줍니다. 위와 같이 rds를 누르면 아래의 화면이 나오는데 데이터베이스 생성을 눌러줍니다. 데이터베이스 생성 방식은 손쉬 생성으로 하고 저는 MySQL를 사용할 것이기 때문에 엔진 옵션을 MySQL로 선택해줍니다. 그 후 아래의 그림과 같이 프리 티어로 설정하고 DB 인스턴스 식별자, 암호 등을 설정해줍니다. 그리고 유의해야 하는 점이 우측 상단에 현재 내가 어디에 rds를 설정할 것인지에 대한 지역 정보가 있는데 이를 이전에 만들어둔 ec2 서버와 같은 위치로 해주어야 합니다. 마스터 암호도 나중에 rds에 접속할 때 필요하므로 따로 저장해둡니다. .. 2024. 1. 22.
반응형