스프링 29

[Spring] racing - API 서버 구현(2)

저번 포스팅에 이어 바로 제가 어떻게 구현했는지 보여드리고자 합니다.  2. 자동차 경주 시작(Post) * WebController@PostMapping("/cars/racing")private ResponseEntity starRace() { racingService.startRace(); return ResponseEntity.status(HttpStatus.NO_CONTENT).build();} 컨트롤러는 위와 같이 구현하였습니다.경주만 시작하면 되고, Response가 따로 정해진게 없어서 Response 를 넘겨주지 않았습니다. *RacingServicepublic void startRace() { for (int i = 0; i private void moveCars() { ..

[Spring] racing - API 서버 구현(1)

콘솔 프로그램을 구현했으니, API 서버를 구현할 차례입니다.  API 서버 구현 규칙은 다음과 같습니다.  서버 구현 규칙 미션 설명 란에 처음 보는 단어들이 많은 것 같습니다. 해당 키워드들은 따로 정리하여 포스팅하려고 합니다.  다음은 API 명세서 입니다.구현해야할 API는 다음과 같습니다. API 명세서 이렇게 총 4개의 기능을 구현하면 됩니다.이제 바로 기능 구현으로 넘어가도록 하겠습니다.  1. 자동차 이름 등록(POST) * WebController@PostMapping("/create")private ResponseEntity createCars(@RequestBody CreateRequest createRequest) { racingService.createCars(createRe..

IoC(Inversion Of Control) 컨테이너와 스프링 빈(Bean)

앞서 설명한 의존성 주입(Dependency Injection, DI)은 IoC의 한 형태입니다.  도대체 무슨 말일까요?  이를 이해하기 위해서는 IoC를 이해해야 합니다. IoCIoC란 흔히 "제어의 역전" 이라고 불립니다.객체의 생성과 소멸 등등을 책임졌던 개발자의 객체 제어권이 바뀌었다는 소리입니다. 일반적으로 개발자는 객체를 직접 생성하고, 메서드를 호출하여 코드를 작성하였습니다.하지만 IoC에서는 직접 객체를 생성하고 호출하는 것이 아니라, 외부에서 객체를 생성하거나 호출합니다. 이를 통해 개발자는 코드를 작성할 때 의존성을 최소화하고 더욱 유연하게 코드를 작성할 수 있습니다. 위의 질문을 해결하자면, Spring Framework는 IoC 컨테이너를 이용하여 의존성 관리 및 의존성 주입을 수..

의존성 주입(DI)과 주입 방식

의존성 주입의존성 주입은 흔히 DI(Dependency Injection) 라고 불립니다. 그렇다면 의존성 주입이란 도대체 뭘까요?-> 스프링 프레임워크에서, 의존성 주입은 직접 객체를 생성하거나 참조하지 않고 외부에서 주입받는 것을 의미합니다. 그렇다면 의존성 주입을 왜 사용할까요?1. 코드가 깔끔해진다.2. 의존성 주입을 통해 객체들이 효과적으로 분리된다.3. 코드의 재사용성과 유연성이 높아진다.의존성 주입 방법1. 생성자 주입 생성자를 통해 의존성을 주입하는 방법입니다. 스프링이 가장 권장하는 방법이기도 합니다.@Servicepublic class SimpleMovieLister { private final MovieFinder movieFinder; public SimpleMovieLi..

@Data 어노테이션에 관하여

기본적으로 @Data 어노테이션은 Lombok 라이브러리에서 제공하는 기능입니다.## @Data 어노테이션 특징1. Getter 메서드: 각 필드에 대해 getter 메서드를 생성합니다.2. Setter 메서드: 각 필드에 대해 setter 메서드를 생성합니다.3. toString() 메서드: 객체의 내용을 문자열로 변환하는 toString() 메서드를 생성합니다.4. equals() 메서드: 객체 간의 동등성을 비교하는 equals() 메서드를 생성합니다.5. hashCode() 메서드: 객체의 해시 코드를 반환하는 hashCode() 메서드를 생성합니다.6. RequiredArgsConstructor: final 또는 @NonNull로 선언된 필드에 대한 생성자를 자동으로 생성합니다.이렇게..

[Spring] racing 콘솔 테스트 코드 작성 - 인터페이스는 어떻게 테스트 해야할까?

저번 포스팅에서는 racing 콘솔 프로그램 구현 과정을 설명드렸습니다. 그래서 이번 포스팅에서는 테스트 코드에 관해 다룰려고 합니다!그 중에서도 인터페이스 테스트에 관한 부분입니다.  전체적인 테스트 코드를 다루지 않는 이유는 테스트 코드 하나 하나 나열하자니 너무 많기도 하고, 테스트 코드 자체가 설명이기에 따로 설명할 것이 없어 코드 복붙밖에 안된다는 생각이 들었습니다... 그래서 앞으로는 테스트 코드 중에서도 조금 특별한 부분을 중점적으로 다루고자 합니다.오늘은 제가 인터페이스 테스트 어떻게 했는지 설명드리겠습니다! * CreateRandomNumberpublic interface CreateRandomNumber { int generateRandomNumber();} * CarRandomN..

[Spring] racing - 콘솔 프로그램 구현

racing 콘솔 프로그램 구현 바로 시작했습니다 ㅎㅎ 먼저 어떤 프로그램을 구현해야 하는지 설명해드릴게요. 위에 보이는 사진은 기능 요구사항과, 실행 결과 입니다. 자동차를 입력 받고, 5번 움직였을 경우의 결과를 도출하는 프로그램을 구현해야 합니다.기능구현목록  프로그램을 구현하기 전에 기능 구현 목록을 정리해봤습니다! 어떤 생각을 가지고 저런 식으로 작성하였는지 설명하겠습니다. Car : moveCount(움직인 횟수)를 필드로 두어 일급컬렉션을 적용합니다.랜덤 숫자를 생성하는 인터페이스를 이용하여 움직일지 말지 정하는 로직을 구현할 생각입니다. Cars : List 를 필드로 두어 일급컬렉션을 적용합니다.전체적인 Car를 관리합니다. CarNameParser :자동차 이름을 한 번에 입력 받을 때..

[Spring] 미션 시작!

초록 스터디가 끝나고, 멘토님의 개인적인 주관 하에 스프링부트 멘토링을 시작하였습니다!  요런 식으로 racing -> lotto -> board 순서로 진행된다고 합니다. racing 과 lotto 는 콘솔 프로그램으로 구현한 적이 있는데, 이 콘솔 프로그램 로직을 스프링에 옮겨와 구현한다고 하더라고요. 아직 무슨 소리인지는 잘 모르겠지만 초록 스터디 참여했던 것처럼 열심히 해보겠습니다! 벌써 떨리네요 ㅋㅋㅋㅋ 드디어 스프링을 하다니..... 책도 많이 읽고 기본기 탄탄하게 다져가며 실력 쌓아보겠습니다~~

Session 과 Session Login

세션이란 무엇인가?세션은 서버에서 유지되는 사용자의 상태 정보를 의미합니다.왜 세션을 써야 하는가? - 인증의 필요성HTTP 프로토콜의 특징으로 인해 필요합니다.비연결성 : 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊는 방식입니다.무상태 : 커넥션이 끊는 순간 이후로 어떠한 상태정보를 유지하지않는 특성입니다.서버는 클라이언트 기억하지 못함 -> 계속 기억시켜 줌 :: 이것이 인증세션 장단점장점보안성:세션은 클라이언트 측에 민감한 데이터를 저장하지 않고, 서버에서만 데이터를 관리하므로 보안성이 높습니다. 쿠키에는 세션 ID만 저장되고, 실제 데이터는 서버에서만 접근 가능합니다..데이터 무결성:세션 ID가 서버에서 관리되기 때문에, 클라이언트가 데이터를 조작..

Cookie 와 Cookie Login

쿠키란 무엇인가?쿠키는 사용자의 웹 브라우저에 저장되는 작은 데이터 조각입니다.왜 쿠키를 써야 하는가? - 인증의 필요성HTTP 프로토콜의 특징으로 인해 필요합니다.비연결성 : 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊는 방식입니다.무상태 : 커넥션이 끊는 순간 이후로 어떠한 상태정보를 유지하지않는 특성입니다.서버는 클라이언트 기억하지 못함 -> 계속 기억시켜 줌 :: 이것이 인증쿠키의 장단점장점클라이언트 측에 상태 저장:클라이언트에서 상태 정보를 저장할 수 있어 서버 자원 절약이 가능합니다.자동 요청 전송:브라우저가 자동으로 쿠키를 서버에 포함시켜 전송하므로 개발자가 별도의 처리 없이 상태 유지 가능합니다.상태 유지:정보를 저장하여, 사용자가 웹사이트..