59,400원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
서비스 메소드 작성 시 질문!
안녕하세요 쥬쥬님 서비스에서 메서드를 만들 때 질문 있습니다. A라는 서비스 메소드를 만들 때 로직이 복잡하면 코드가 엄청 길어지면 그 때는 안에 있는 메소드를 B, C 서비스 메소드로 분리해야 할 것 같은데 서비스 메소드를 만들 때 기준이 있나요?지금 createReview 서비스 메소드를 만들때restaurantRepository.findById(restaurantId).orElseThrow()를 사용하여 조회 및 검증 작업을 진행하는데 추후에 해당 코드를 그대로 유지하는지, 서비스 메소드로 분리하는지, 스태틱 메서드로 만드는지 기준이 궁금합니다.
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
RestaurantApi 컨트롤러 개발 질문
안녕하세요 쥬쥬님 RestaurantApi 컨트롤러 개발 시 프론트로부터 파라미터를 받고 서비스로 바로 넘겨주셨는데 현업이나 일반적으로 보통 컨트롤러에서 파라미터를 받으면 그대로 서비스 단으로 넘겨주는지 궁금합니다!
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
@Transactional 질문 있습니다!
안녕하세요@Transactional 어노테이션을 클래스에다가 붙이면 안에 있는 메서드에 전부 적용되는 것으로 알고 있는데쥬쥬님께서는 메서드 하나하나에 적용을 하시더라구요 혹시 메서드에 하나하나 달아주는 이유를 알 수 있을까요??
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
변경데이터 저장 방법 질문 있습니다!
안녕하세요 쥬쥬님testEntity를 리포지토리에서 조회에서 가져온 다음에change 메서드로 수정을 한 후에리포지토리의 save 메서드를 사용하셨는데dirty checking을 사용하지 않고 save를 사용하신 이유가 있을까요?
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
dto 관련 질문입니다.
컨트롤러(Api) 패키지 안에 만드신 dto(request, response)는 private final로 선언하셔서 데이터가 변경되지 않도록 선언하셨고,서비스단 패키지 안에 만드신 ReviewDto는 private으로만 선언하여 데이터가 언제든 변경이 되게끔 선언하셨는데이 차이가서비스단 로직의 데이터는 비즈니스 로직을 통해 언제든 변할 수 있기 때문이고컨트롤러단 로직은 받아온 데이터와, 응답하는 데이터이기 때문에 변할 일이 없기에 선언 방식이 다른 것이 맞을까요? 너무 기초적인 부분일 수 있지만제가 이해한 바가 맞는지 궁금하여 질문드립니다.
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
이너 클래스 vs 클래스 별도 생성의 차이?
[4-5 맛집 정보 가져오기 API 개발하기]맛집 정보 가져오기 API 부분 코드 작성해 주시는 부분에서 (2분 34초쯤부터)메뉴 클래스를 하나 더 만드실지 고민하시는듯 하다가 이너 클래스로 만드신 것처럼 보이는데요,이전에 request 만드실때는 메뉴 클래스를 분리하셨는데해당 부분에서는 고민하시다가 이너 클래스로 만드신 이유가 무엇인지그리고 어떤 경우에 이너 클래스를 쓰고 분리를 하는지 궁금해서 문의드립니다.
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
TestEntityApi중 createTestEntity에서 질문있습니다
testService.create(request.getName(), request.getAge());를testService.create(request.name, request.age)로 바꿔도 작동하는데 혹시 차이점이 있나요?
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
ResponseBody 강의에서 클래스 생성 관련 질문드립니다.
리턴을 new 키워드를 통해 인스턴스를 생성해서 하는데 클래스에 static키워드를 붙이는 이유가 있는지 궁금합니다.
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-3 진행 중 에러 발생
2-3 강의 중 12분 쯤에 Send를 누르면 200 OK가 떠야한다고 하셨는데 저는 500 에러가 발생합니다!package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.repository; import com.jyujyu.review.model.TestEntity; import org.springframework.data.jpa.repository.JpaRepository; public interface TestRepository extends JpaRepository<TestEntity, Long> { // Long -> TestEntity에 @Id가 있는 필드의 자료형을 작성한다. } package com.jyujyu.review.model; import jakarta.persistence.*; import lombok.Getter; @Getter @Table(name = "test") @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; public TestEntity(String name, Integer age) { this.name = name; this.age = age; } public TestEntity() { } public void changeNameAndAge(String name, Integer age) { this.name = name; this.age = age; } }plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.jyujyu' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' } tasks.named('test') { useJUnitPlatform() } server.port=8081 spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.h2.console.settings.web-allow-others=true spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:rss spring.datasource.username=sa spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true알려주신대로 코드를 작성하고 포스트맨에서 Send를 눌러도 500 Internal Server:Error 라고 뜨네요 ㅠ 원인을 찾아봐도 안보여서 여쭙습니다..! 참고로 포트는 8081이 맞습니다혹시 파일 필요하실까봐 링크 첨부했습니다https://drive.google.com/file/d/1W65YQNY5rOGjWuqr-ntff7_QuTWz4eDw/view?usp=sharing
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
ReviewDto 객체 사용 이유
리뷰 목록 페이지를 조회할 때 마지막에 ReviewDto 객체로 변환해서 반환을 하는데 이렇게 하는 이유가 무엇인지 궁금합니다
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-2 h2 console connect 관련 질문 드립니다.
처음에 잘 되다가 다시 접속할려고 보니 다음과 같이 오류가 뜨면서 connect가 안됩니다.. 그리고 h2 embedded가 아닌 server로 계속 잡힙니다
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
소스작성중에서요 queryFactory중에?
queryFactory중에서 select(QReviewEntity.reviewEntity.score.avg())queryFactory.selectFrom(QTestEntity.testEntity)중에서 QReviewEntity, QTestEntity가 에러가 나네요. 어찌해야 할지요? db오라클로 하고 있어요.
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
docker에 관하여 질문 드립니다.
안녕하세요 우선 끝까지 강의 잘들었습니다!!! docker 부분이 아직 익숙하지 않아 질문드립니다docker를 따라 설치하니 저장소 같은 곳에 이미지가 저장되는 것을 확인하였습니다.해당 이미지를 aws 인스턴스에서 받아서 바로 사용할 순 없는건가요? -> 굳이 git clone으로 프로젝트를 받아와야 하는지 궁금합니다 / docker 저장소에 이미지를 올리고 바로 받아서 실행하면 되는게 아닌가 싶어서 질문드립니다...2.가 만약 틀린거라면 build/libs에 있는 파일이 직접적으로 실행을 시키면서 애플리케이션이 실행되는 것 같은데 이 이미지를 굳이 docker 저장소에 올리는 이유가 궁금합니다.
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
DTO, Request, Response 차이점
질문이 너무 짧아서 죄송하지만... 제목 그대로 3가지 쓰임의 차이점을 알고 싶습니다. 언제 어떤것을 사용해야 하는지 잘모르겠네요...
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
TestRepositoryImpl 질문이요
where(QTestEntity.testEntity.name.eq(name)과 같이조건을 넣어줘야되지 않나요..?
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
pk, fk 연결
맛집 리뷰 서비스 만들어보는 부분 따라하고 있는데요궁금한점이 있어요. erd 보시면 맛집 id가 리뷰, 메뉴 테이블의 fk로 들어가 있잖아요그런데 코드단에서 이걸 연결해 주는 작업을 한 적이 없는 거 같은데h2에 생성된 디비에는 어떻게 연결이 되어있는 건가요?코드에서 이 작업을 해주는 부분이 어디인가요?
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
.gitignore 에 포함할 파일
gradlew gradlew.batapplication.properties파일들이 깃헙에 올라가도 상관이 없나요?기본적으로 지금 .gitignore에 적혀있는 파일들 제외하고는 다 깃헙에 올라가도 괜찮은걸까요?HELP.md .gradle build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache bin/ !**/src/main/**/bin/ !**/src/test/**/bin/ ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr out/ !**/src/main/**/out/ !**/src/test/**/out/ ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ ### VS Code ### .vscode/
- 해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
Spring Initializr 스프링 버전
강의에서 Spring Boot 3.0.6 버전 선택하라고 하시는데지금 Spring Initializr 사이트에 3.0.6 버전이 없네요.어떤 걸 선택하면 될까요?
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-4 수정중 오류
안녕하세요 쥬쥬님 강의 너무 잘 듣고 있습니다 제가 따라가는건 잘했는데 지금 AGE 부분이 프라이머리 키로 지정이 되어있는 것 같은데 어디서 부터 잘못된건지 모르겠습니다...
- 미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
1-6 생성자 오류
TestRequestBody 부분을 똑같이 작성했는데No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator.라고 오류가 생성돼서 아래처럼 코드를 바꿨더니 실행이되는데 이유를 모르겠습니다public static class TestRequestBody { String name; Integer age; public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public TestRequestBody () {} //Request Body 방식을 사용하기 위해서는 생성자를 꼭 만들어야한다 // public TestRequestBody(String name, Integer age) { // this.name = name; // this.age = age; // } }