묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
### 강사님 꼭 좀 답변 부탁드립니다. ###
몇주전에 MSA 후속 강의에 대해 문의드렸습니다. 이벤트 소싱, 보상 트랜잭션 등 후속 강의 계획이 있으신건가요?계획이 있고, 로드맵을 알려주시면 기다릴텐데.. 아무 소식이 없이 계속 미루어지고 있습니다. 저와 같이 해당 강의를 이미 들으셨던 분, 새로 들으시는 분들 모두가 궁금해하고 듣고싶은 강의라고 생각됩니다.후속 강의가 없다면, 해당 강의의 내용만으로는 사실 실무에서는 사용하기 어렵다고 생각됩니다.axon framework 를 별도로 공부해서 어떻게 할지 감은 오지만, 그래도 강사님이 실무에서 사용했던 방법을 공유받고 싶은 마음입니다. 꼭 좀 계획을 공유부탁드립니다.혹시라도 후속 강의에 대한 계획이 없는거여도 말씀 좀 부탁드립니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
배포 준비 과정에서 막혀 질문 드립니다.
호돌맨의 요절복통 개발쇼시즌2 배포 준비(빌드) 강의를 듣고 있는데, 계속 오류가 생겨 질문 올립니다. 우선 ./gradlew clean으로 삭제한 뒤./gradlew build를 실행하면 이런 식으로 한글이 깨졌다는 에러가 나옵니다. 해결하고자 했던 방안세팅 바꾸기파일 인코딩 바꾸기Help - EditCustom Vm Options이런 방법을 써 봤으나 다 되지 않았고 이 코드를 build.gradle에 넣는 방식으로 해결했더니build 후 libs 폴더가 생기지 않습니다. 그래서 이 부분을 true로 바꿔주면 plain snapshot만 생깁니다. 어떻게 해결해야 하나요? 밑 코드는 build.gradle 파일입니다.plugins { id 'java' id 'org.springframework.boot' version '2.5.9' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id "org.asciidoctor.jvm.convert" version "3.3.2" } group = 'com.reheat' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } asciidoctorExt } repositories { mavenCentral() } ext { asciidocVersion = "2.0.6.RELEASE" snippetsDir = file('build/generated-snippets') } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' testImplementation 'junit:junit:4.13.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //REST Docs asciidoctorExt "org.springframework.restdocs:spring-restdocs-asciidoctor:${asciidocVersion}" testImplementation "org.springframework.restdocs:spring-restdocs-mockmvc:${asciidocVersion}" } tasks.named('test') { useJUnitPlatform() } test { outputs.dir snippetsDir } asciidoctor { inputs.dir snippetsDir configurations 'asciidoctorExt' dependsOn test } bootJar { enabled = true dependsOn asciidoctor copy { from asciidoctor.outputDir into "src/main/resources/static/docs" } } jar{ enabled = true } tasks.withType(JavaCompile){ options.encoding = "UTF-8" }
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
static not allowed here에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 등록 API를 할 때까지는 static에 에러가 없었는데수정 API를 할 때에 static 부분 4군데에 다 해당 에러가 뜹니다.static이 있는 상태로는 해당 에러로 작동하지 않고static을 지우고 작동을 시키면 작동을 하고 포스트맨에서 수정도 가능합니다.여기서 궁금한 점은1. 왜 이런 상황이 발생하는 지2. static을 지우고 그냥 진행을 시켜도 문제가 없는지에 대해서 알고 싶습니다.
-
해결됨실전! 스프링 데이터 JPA
@Query문
jpashop 프로젝트에서 OrderRepository를 criteria 부분은 스프링데이터jpa로 바꿔보려하는데 @Query(“select o from Order o join o.member m)List<Order> findByMemberName(); 이렇게 작성한다면 Order를 멤버 이름으로 조회 할 수 있을까요??
-
해결됨실전! 스프링 데이터 JPA
Setter 대신 생성자 방식과 @Builder 방식의 선호도
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의를 듣다보면 편의를 위해 setter를 이용해 데이터를 수정하는데 저는 실제로 사용하지 않는 것이 좋다고 들어 생성자를 따로 생성해 강의를 진행하고 있습니다. 그러다보니 생성자 개수가 늘어나 관리? 하기 어려워져 다른 방법을 찾아보던 중 @Builder를 통해 처리하는 방법을 알게되었는데 실제 프로젝트에서는 어떤 방법을 이용하는 것이 좋은건지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
build.gradle에 implementation을 다 추가해서 새로고침까지 마쳤는데 로그가 안떠요 ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.JPA와 DB 설정, 동작확인 챕터에서 implementation를 추가한 후 MemberRepositoryTest를 실행시키면 27:05와 같이 쿼리 로그가 떠야 하는데 뜨지 않고 Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appendedfindMember == member true이 로그만 뜨는데 원인이 뭔지 잘 모르겠습니다 ㅠㅠ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka sink 설정 시 테이블 생성이 안됩니다
{ "name": "my-sink-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "test1234", "mode": "incrementing", "incrementing.column.name": "id", "auto.create": "true", "auto.evolve": "true", "delete.enabled": "false", "tasks.max": "1", "topic": "my_topic_users", "table.whitelist": "mydb.users" } }confluent-community-connect-7.5.0-zOS confluentinc-kafka-connect-jdbc-10.7.4이렇게 사용중이고 모드를 빼면 에러가 발생하네요커넨터 로그엔 에러가 없어요 [2023-12-14 00:57:25,395] INFO SourceConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none exactly.once.support = requested header.converter = null key.converter = null name = my-sink-connect offsets.storage.topic = null predicates = [] tasks.max = 1 topic.creation.groups = [] transaction.boundary = poll transaction.boundary.interval.ms = null transforms = [] value.converter = null (org.apache.kafka.connect.runtime.SourceConnectorConfig:369)[2023-12-14 00:57:25,396] INFO [my-sink-connect|task-0] Validating JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:171)[2023-12-14 00:57:25,396] INFO [my-sink-connect|task-0] Validated JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:174)[2023-12-14 00:57:25,396] INFO [my-sink-connect|task-0] Using JDBC dialect MySql (io.confluent.connect.jdbc.source.JdbcSourceTask:138)[2023-12-14 00:57:25,396] INFO EnrichedConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none exactly.once.support = requested header.converter = null key.converter = null name = my-sink-connect offsets.storage.topic = null predicates = [] tasks.max = 1 topic.creation.groups = [] transaction.boundary = poll transaction.boundary.interval.ms = null transforms = [] value.converter = null (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig:369)[2023-12-14 00:57:25,397] INFO [my-sink-connect|task-0] [Producer clientId=connector-producer-my-sink-connect-0] Cluster ID: 61ETmEcJQASp3yeJGdTmPw (org.apache.kafka.clients.Metadata:287)[2023-12-14 00:57:25,413] INFO [my-sink-connect|task-0] Found offset {{table=users}=null, {protocol=1, table=mydb.users}={incrementing=17}} for partition {protocol=1, table=mydb.users} (io.confluent.connect.jdbc.source.JdbcSourceTask:234)[2023-12-14 00:57:25,414] INFO [my-sink-connect|task-0] Started JDBC source task (io.confluent.connect.jdbc.source.JdbcSourceTask:307)[2023-12-14 00:57:25,414] INFO [my-sink-connect|task-0] WorkerSourceTask{id=my-sink-connect-0} Source task finished initialization and start (org.apache.kafka.connect.runtime.AbstractWorkerSourceTask:275)[2023-12-14 00:57:25,414] INFO [my-sink-connect|task-0] Begin using SQL query: SELECT * FROM mydb.`users` WHERE mydb.`users`.`id` > ? ORDER BY mydb.`users`.`id` ASC (io.confluent.connect.jdbc.source.TableQuerier:182)
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
초반 프로젝트 설정 (build 관련)
안녕하세요인텔리제이에서 프로젝트를 open>build>LibraryAppApplication run을 하면 아래 화면에서 더이상 진행되지 않습니다.Started LibraryAppApplication in 3.292 seconds (JVM running for 3.791) 라는 메세지가 마지막에 출력되나좌측에 상태를 보면 '빌드 중'으로 계속 출력되고 있습니다. 추가로 확인해봐야 하는 설정이 있으면 안내 부탁드립니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
4섹션 스프링컨테이너로 통합 재생이 안됩니다.
계속 무한 로딩만 뜨고 재생이 안됩니다. ㅠ+같은 섹션 'SpringBootApplication' 도 재생이 안되고 있습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring 이 뜬다고 하셨는데 그 의미가 궁금합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예. 검색해도 안나와서 올렸습니다.3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요."스프링이 뜬다" 라고 하셨는데톰캣서버가 기동되는거라고 이해하면 되나요? 그리고 @controller 어노테이션을 지정해두면스프링이 떴을 때 해당 컨트롤러에 대한 인스턴스를 생성해서담아둔다고 하셨는데 이건 스프링 컨테이너에 담겨있는 걸로 보면 되나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
도와주세옹/http://localhost:8080/hello
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용]http://localhost:8080/hello안들어가져요 ㅠㅠ다시보기 계속해도 답이 안나와서 질문글 올립니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
에러가 발생했는데 원인을 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@545d2560 testClass = hello.spring.hello.service.MemberServiceIntegrationTest, locations = [], classes = [hello.spring.hello.HelloApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@61001b64, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4b8ee4de, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4659191b, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3527942a, org.springframework.boot.test.context.SpringBootTestAnnotation@5891170b], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]테스트 실행시 이런 오류가 발생했습니다.Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect')caused by는 위처럼 나왔습니다.설정의 오류인것 같은데 무슨 설정의 오류인지 모르겠고 어떻게 설정해줘야 하는지 모르겠습니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Spring REST Docs1 - 기본설정 get (url) 질문
plugins { id 'java' id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id "org.asciidoctor.jvm.convert" version "3.3.2" } group = 'com.blog' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } asciidoctorExt } repositories { mavenCentral() } ext { asciidocVersion = "2.0.6.RELEASE" snippetsDir = file('build/generated-snippets') } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'com.querydsl:querydsl-core' implementation 'com.querydsl:querydsl-jpa' asciidoctorExt "org.springframework.restdocs:spring-restdocs-asciidoctor:${asciidocVersion}" testImplementation "org.springframework.restdocs:spring-restdocs-mockmvc:${asciidocVersion}" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } test { outputs.dir snippetsDir } asciidoctor { inputs.dir snippetsDir configurations 'asciidoctorExt' dependsOn test } bootJar { dependsOn asciidoctor from ("${asciidoctor.outputDir}/html5") { into 'static/docs' } } package com.blog.api.controller; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.restdocs.RestDocumentationContextProvider; import org.springframework.restdocs.RestDocumentationExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static com.querydsl.core.alias.MethodType.get; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @SpringBootTest @ExtendWith(RestDocumentationExtension.class) public class PostControllerDocTest { private MockMvc mockMvc; @BeforeEach void setUp(WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) { this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) .apply(documentationConfiguration(restDocumentation)) .build(); } @Test @DisplayName("아무개") void Test1() throws Exception { this.mockMvc.perform(get("/").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(document("index")); } } 위와 같이 Test1 에서 get("/") 부분에서 url 타입이 계속 안맞다고 하는데요강의와 똑같이 했는데 뭐가 문제인지 잘 모르겠습니다.
-
미해결스프링 부트 - 핵심 원리와 활용
[intellij 무료버전]tomcat runner 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 캐시 삭제도 해봤고,인텔리제이 버전도 22.3.3으로 내렸습니다. 여전히 run configuration에서 이렇게밖에 뜨지 않습니다ㅠ 추가로 build.gradle에 복붙하는 코드에서 이런 게 뜨는데, 상관이 있는 걸까요?ㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberForm에 자동으로 name이 저장된 이유를 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 스프링 공부하다가 궁금한 점이 생겼습니다.아래의 코드에서 MemberForm에 직접 name을 저장한 적은 없는데 form에 name이 저장된 이유는 Controller에 create 메서드가 포함되어 있고 그 메서드가 MemberForm을 매개변수로 받기 때문에 spring이 MemberForm의 name을 관리해주는 건가요? @PostMapping("/members/new") public String create(MemberForm form) { System.out.println(form.getName()); Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; }
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
부분 업데이트시 PATCH vs POST
회원 수정 API 관련해서 강의 자료 오류 정정부분에 PUT은 전체 업데이트 시 사용하는 것이고, 부분 업데이트 할 때는 PATCH나 POST를 사용하는 것이 맞다고 나와있는데 실무에서는 PATCH나 POST중에 어떤 것을 더 많이 사용하나요? 개인 프로젝트시에 참고하고 싶어 질문드립니다!
-
해결됨[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
Exception Class 생성 문의
안녕하세요예외 클래스 생성하는 것에 대해서 질문드립니다.일반적으로 API를 클라이언트에서 호출 했을 때Exception이 발생하면실무에서는 보통 해당 강의와 같이 Exception을 직접 만들어서 사용하는지 여쭤보고자 합니다.
-
해결됨스프링 시큐리티 OAuth2
로그아웃 시, 토큰 만료 처리
로그아웃 시, 토큰 만료 처리로그아웃 할 때, 토큰 무효화를 확실히 하기 위해 oauth2_authorization 테이블에 있는 액세스 토큰과 리프레시 토큰을 만료 시키고 싶은데 맞는 방법인지 모르겠습니다.로그아웃url 뒤에 쿼리로 액세스 토큰, 리프레시 토큰 받아와 커스텀한 logoutHandler에서 OAuth2AuthorizationService 호출하여 토큰 유효기간을 업데이트 하여 무효화하긴 했는데 위 방법처럼 DB의 oauth2_authorization 테이블을 직접 업데이트쳐서 토큰을 무효화 해도 되는것인지, Spring boot 내에서 왜 로그아웃할 때 토큰 유효기간을 만료시키지 않는 것인지 궁금합니다. 로그인 시, 세션 인증 정보 저장그리고 로그인할 때 OAuth2AuthorizationServerConfigurer내부에서 세션에 인증 정보(유저명, 인증여부 등)담고 있는데 인증서버를 여러 대 구성할 경우, 문제가 없을지? redis를 사용해야할지 궁금 합니다.oauth2는 토큰발급하여 인가하는데 왜 세션에 인증정보를 저장하여 사용하나요?
-
해결됨스프링 부트 - 핵심 원리와 활용
@Value 검증 적용 관련 질문드립니다.
@Value를 적용한 필드에 @Min(1) 과 같은 검증을 적용할 수는 없을까요?아래 소스코드처럼 작성해 MyDataSourceValueConfig를 빈으로 등록하면 @Validated가 동작해 검증될 줄 알았는데 적용되지 않습니다. 원인이 무엇인지 궁금합니다...(코드 내 $가 포함되면 이상하게 동작해,$를 #로 변경하였습니다.)package hello.datasource; import hello.datasource.MyDataSource; import jakarta.validation.constraints.Min; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.validation.annotation.Validated; import java.time.Duration; import java.util.List; @Slf4j @Configuration @Validated public class MyDataSourceValueConfig { @Value(“#{my.datasource.url}") private String url; @Value(“#{my.datasource.username}") private String username; @Value(“#{my.datasource.password}") private String password; @Value(“#{my.datasource.etc.max-connection}") @Min(1) private int maxConnection; @Value(“#{my.datasource.etc.timeout}") private Duration timeout; @Value(“#{my.datasource.etc.options}") private List<String> options; @Bean @Validated public MyDataSource myDataSource1() { return new MyDataSource(url, username, password, maxConnection, timeout, options); } @Bean public MyDataSource myDataSource2( @Value(“#{my.datasource.url}") String url, @Value(“#{my.datasource.username}") String username, @Value(“#{my.datasource.password}") String password, @Value(“#{my.datasource.etc.max-connection}") int maxConnection, @Value(“#{my.datasource.etc.timeout}") Duration timeout, @Value(“#{my.datasource.etc.options}") List<String> options ) { return new MyDataSource(url, username, password, maxConnection, timeout, options); } }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberServiceTest 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)=======================================이하 MemberServiceTest 코드입니다.이하 오류 메시지입니다.h2 실행 여부와 관계 없이 같은 오류가 뜨네요.어떻게 해결하면 좋을까요?감사합니다.