묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
stringRedisTemplate 사용시 이슈 파악
StockRepository 가 아닌 stringRedisTemplate 을 사용하면 어떤 차이점이 있을까요?
-
미해결스프링 핵심 원리 - 기본편
콘솔에 스프링 실행 시 로그가 안뜹니다.
안녕하세요 스프링 3.2.0을 쓰고 있습니다.강사님처럼 스프링 실행 시이러한 로그들이 안뜨고, MemberApp이나 OrderApp을 실행하면이런식으로 뜨는데 스프링 버전 차이에서 오는 것일까요..?교안에도 이렇게 나와있어서요. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
OpenJDK64-Bit
OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.아래의 오류는 어떻게 해결해야 하는지 잘 모르겠습니다...
-
미해결Practical Testing: 실용적인 테스트 가이드
data가 isArray() = ture인 이유
ProductControllerTest에서@DisplayName("판매 상품을 조회한다.") @Test void getSellingProducts() throws Exception { // given List<ProductResponse> result = List.of(); when(productService.getSellingProducts()).thenReturn(result); // when // then mockMvc.perform( get("/api/v1/products/selling") ) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value("200")) .andExpect(jsonPath("$.status").value("OK")) .andExpect(jsonPath("$.message").value("OK")) .andExpect(jsonPath("$.data").isArray()); }data의 타입이 List인데 isArray()로 확인되는 이유는 JSON으로 변경될 때 List타입을 Array타입으로 자동으로 변경해서 그런건가요?
-
미해결스프링 핵심 원리 - 기본편
질문있습니다.
조회한 빈이 모두 필요할 때 List,Map을 이용하는 문제입니다. package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); System.out.println("discountCode = " + discountCode); System.out.println("discountPolicy = " + discountPolicy); return discountPolicy.discount(member, price); } } } 여기서 policyMap과 List에 주입되는 과정이 이해가 안갑니다. Map은 왜 <String,DiscountPolicy>로 정의했고 List는 <DiscountPolicy>로 정의 했는지, 그리고 여기에 어떻게 Ratediscountpolicy와 Fixdiscountpolicy가 들어갔는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
콘솔창 빨간 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]계속 이렇게 뜨는데 런타임때 오류는 딱히 발생하지 않습니다 런타임 이후 런타임을 중지 할때 이런 오류가 계속뜨는데 이유를 모르겠습니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
기본객체들 404
스프링MVC 기본객체들 강의 학습중인데요404가 나오네요 소스 자체를 복붙해도 404가 나오는데 원인을 모르겠습니다 스프링은 3.2.0 버전사용하고 있고아래는 소스코드 입니다BasicControllerpackage hello.thymeleaf.basic; import jakarta.servlet.http.HttpSession; import lombok.Data; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller @RequestMapping("/basic") public class BasicController { @GetMapping("text-basic") public String textBasic(Model model) { model.addAttribute("data", "Hello Spring!"); return "/basic/text-basic"; } @GetMapping("text-unescaped") public String textUnescaped(Model model) { model.addAttribute("data", "<b>Hello Spring!</b>"); return "/basic/text-unescaped"; } @GetMapping("/variable") public String variable(Model model) { User userA = new User("userA", 10); User userB = new User("userB", 20); List<User> list = new ArrayList<>(); list.add(userA); list.add(userB); Map<String, User> map = new HashMap<>(); map.put("userA", userA); map.put("userB", userB); model.addAttribute("user", userA); model.addAttribute("users", list); model.addAttribute("userMap", map); return "basic/variable"; } @Data static class User { private String username; private int age; public User(String username, int age) { this.username = username; this.age = age; } @GetMapping("/basic-objects") public String basicObjects(HttpSession session) { session.setAttribute("sessionData", "Hello Session"); return "basic/basic-objects"; } @Component("helloBean") static class HelloBean { public String hello(String data) { return "Hello " + data; } } } } basic-objects<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>식 기본 객체 (Expression Basic Objects)</h1> <ul> <li>request = <span th:text="${request}"></span></li> <li>response = <span th:text="${response}"></span></li> <li>session = <span th:text="${session}"></span></li> <li>servletContext = <span th:text="${servletContext}"></span></li> <li>locale = <span th:text="${#locale}"></span></li> </ul> <h1>편의 객체</h1> <ul> <li>Request Parameter = <span th:text="${param.paramData}"></span></li> <li>session = <span th:text="${session.sessionData}"></span></li> <li>spring bean = <span th:text="${@helloBean.hello('Spring!')}"></span></li> </ul> </body> </html>index.html<html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li>텍스트 <ul> <li><a href="/basic/text-basic">텍스트 출력 기본</a></li> <li><a href="/basic/text-unescaped">텍스트 text, utext</a></li> </ul> </li> <li>표준 표현식 구문 <ul> <li><a href="/basic/variable">변수 - SpringEL</a></li> <li><a href="/basic/basic-objects?paramData=HelloParam">기본 객체들</a></li> <li><a href="/basic/date">유틸리티 객체와 날짜</a></li> <li><a href="/basic/link">링크 URL</a></li> <li><a href="/basic/literal">리터럴</a></li> <li><a href="/basic/operation">연산</a></li> </ul> </li> <li>속성 값 설정 <ul> <li><a href="/basic/attribute">속성 값 설정</a></li> </ul> </li> <li>반복 <ul> <li><a href="/basic/each">반복</a></li> </ul> </li> <li>조건부 평가 <ul> <li><a href="/basic/condition">조건부 평가</a></li> </ul> </li> <li>주석 및 블록 <ul> <li><a href="/basic/comments">주석</a></li> <li><a href="/basic/block">블록</a></li> </ul> </li> <li>자바스크립트 인라인 <ul> <li><a href="/basic/javascript">자바스크립트 인라인</a></li> </ul> </li> <li>템플릿 레이아웃 <ul> <li><a href="/template/fragment">템플릿 조각</a></li> <li><a href="/template/layout">유연한 레이아웃</a></li> <li><a href="/template/layoutExtend">레이아웃 상속</a></li> </ul> </li> </ul> </body> </html>링크여기서 막혀서 학습을 못하고 있어요 ㅠㅠ 도와주세요
-
미해결Practical Testing: 실용적인 테스트 가이드
안녕하세요 강사님 관련 질문은 아닌데 테스트 때문에 진도를 못 나가서 질문 하나 올립니다!!
Redis 테스트는 어떻게 진행해야 되는지 모르겠습니다.. embedded Redis 를 사용해야 되는지,테스트 컨테이너를 사용해야 되는지 어떤 방법으로 진행해야 되는지 가르쳐주실 수 있나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
properties안에 써놓은 한글이 깨집니다.
이런식으로 한글이 깨지는데, 처음엔 @Getter나 jackson라이브러리나 slf4j가 깨지는 줄 알았는데게터 세터 직접 구현하고 브라우저에서 찍고, ide상에서 System.out.println으로 찍어도 깨지네요 ㅠㅠ.. 검색해서 나온이런것 다 해보았습니다.vmoption 파일도 수정했습니다. 실행 옵션에 따라 동적으로 서비스 명 다르게 해서 배포하고 싶었는데, 잘 안되네요 ㅠㅠ..강의를 따라했을 때 국제화 message는 안깨졌었는데 이상하네요..
-
해결됨
스프링 부트 버전 질문
지금 스프링 부트 버전이 3.16이 제일 낮은 버전이고 자바 17이상 부터 사용할 수 있는거 같습니다.하지만 포트폴리오용으로 개발을 하기에 자바 17이 괜찮은지 버전을 낮추는게 좋은지 궁금하고, 버전을 어떻게 낮추는지도 알고 싶습니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
org.hibernate.sql 출력
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 영한님처럼 이렇게 나왔으면 하지만,, spring: #띄어쓰기 없음 datasource: #띄어쓰기 2칸 url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: #띄어쓰기 2칸 hibernate: #띄어쓰기 4칸 ddl-auto: create #띄어쓰기 6칸 properties: #띄어쓰기 4칸 hibernate: #띄어쓰기 6칸 format_sql: true # show_sql: true #띄어쓰기 8칸 logging: level: org.hibernate.sql: debug org.hibernate.orm.jdbc.bind: traceyml 설정이 이렇게 되있는데도 아래와 같이 나옵니다. 그리고 빨간 경고가 뜨는 이유는 뭔지 알 수 있을까요..? WARNING: A Java agent has been loaded dynamically (C:\...\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.10\90ed94ac044ea8953b224304c762316e91fd6b31\byte-buddy-agent-1.14.10.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release ```부트 3.2버전에 JDK는 21로 설정했습니다. 혹시나 build.gradle 도 같이 올립니다. plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'jbabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '21' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
SQL 실행로그가 보이지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]테이블 생성 제대로 되는 것 확인하였으나 sql문이 터미널에 나타나지 않습니다.이전 강의 참고하여 repository를 인터페이스 상속받는 형태로 만들어보긴 했는데 이 부분은 문제 없을 것으로 생각됩니다.build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } } tasks.named('test') { useJUnitPlatform() } application.ymlspring: datasource: url: jdbc:h2:tcp://localhost/~/databasesByH2/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: #show_sql: true format_sql: true logging.level: org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6 Member.javapackage jpabook.jpashop.entity; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; } MemberRepository.java(인터페이스)package jpabook.jpashop.repository; import jpabook.jpashop.entity.Member; public interface MemberRepository { public Long save(Member member); public Member find(Long id); } JpaMemberRepository.java(구현체)package jpabook.jpashop.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jpabook.jpashop.entity.Member; import org.springframework.stereotype.Repository; @Repository public class JpaMemberRepository implements MemberRepository{ @PersistenceContext EntityManager em; @Override public Long save(Member member) { em.persist(member); return member.getId(); } @Override public Member find(Long id) { return em.find(Member.class, id); } } JpaMemberRepositoryTest.javapackage jpabook.jpashop.repository; import jpabook.jpashop.entity.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import static org.junit.jupiter.api.Assertions.*; @RunWith(SpringRunner.class) @SpringBootTest class JpaMemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) void save() { //given Member member = new Member(); member.setUsername("조건우"); //when Long resultId = memberRepository.save(member); Member findMember = memberRepository.find(resultId); //then Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember).isEqualTo(member); } @Test void find() { } }JpaMemberRepositoryTest.java 실행로그> Task :compileJava UP-TO-DATE > Task :processResources UP-TO-DATE > Task :classes UP-TO-DATE > Task :compileTestJava UP-TO-DATE > Task :processTestResources NO-SOURCE > Task :testClasses UP-TO-DATE 15:29:18.352 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.JpashopApplicationTests]: JpashopApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration. 15:29:18.391 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.JpashopApplicationTests 15:29:18.451 [Test worker] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.0) 2023-12-18T15:29:18.567+09:00 INFO 2911 --- [ Test worker] j.jpashop.JpashopApplicationTests : Starting JpashopApplicationTests using Java 17.0.9 with PID 2911 (started by kangg in /Users/kangg/Coding/jpashop) 2023-12-18T15:29:18.568+09:00 INFO 2911 --- [ Test worker] j.jpashop.JpashopApplicationTests : No active profile set, falling back to 1 default profile: "default" 2023-12-18T15:29:18.865+09:00 INFO 2911 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-12-18T15:29:18.875+09:00 INFO 2911 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 JPA repository interfaces. 2023-12-18T15:29:19.077+09:00 INFO 2911 --- [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-12-18T15:29:19.097+09:00 INFO 2911 --- [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.3.1.Final 2023-12-18T15:29:19.111+09:00 INFO 2911 --- [ Test worker] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled 2023-12-18T15:29:19.201+09:00 INFO 2911 --- [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2023-12-18T15:29:19.213+09:00 INFO 2911 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-12-18T15:29:19.245+09:00 INFO 2911 --- [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:tcp://localhost/~/databasesByH2/jpashop user=SA 2023-12-18T15:29:19.246+09:00 INFO 2911 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-12-18T15:29:19.542+09:00 INFO 2911 --- [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2023-12-18T15:29:19.554+09:00 INFO 2911 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-12-18T15:29:19.634+09:00 WARN 2911 --- [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2023-12-18T15:29:19.643+09:00 INFO 2911 --- [ Test worker] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2023-12-18T15:29:19.812+09:00 INFO 2911 --- [ Test worker] j.jpashop.JpashopApplicationTests : Started JpashopApplicationTests in 1.367 seconds (process running for 1.814) OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 2023-12-18T15:29:20.098+09:00 INFO 2911 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2023-12-18T15:29:20.099+09:00 INFO 2911 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2023-12-18T15:29:20.104+09:00 INFO 2911 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. > Task :test Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 2s 4 actionable tasks: 1 executed, 3 up-to-date 3:29:20 PM: Execution finished ':test --tests "jpabook.jpashop.JpashopApplicationTests"'.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
제가 제대로 이해한게 맞는지 알고싶습니다
정적 컨텐츠정적 컨텐츠는 단순히 파일을 그대로 클라이언트에게 전송하는 방식이다. 주로 이미지 파일, CSS 파일, JavaScript 파일 등과 같은 변하지 않는 자원들을 제공할 때 사용한다. MVC와 템플릿 엔진MVC 아키텍처에서 템플릿 엔진을 사용하면 모델(Model), 뷰(View), 컨트롤러(Controller)를 각각 독립적으로 분리할 수 있다. 모델은 데이터를 관리하고, 뷰는 템플릿 엔진을 사용하여 HTML로 동적으로 프로그래밍하며, 컨트롤러는 비즈니스 로직을 처리하고 모델 및 뷰를 관리한다. 렌더링된 HTML은 클라이언트에게 전달되어 화면(=View)에 표시된다. APIAPI는 객체를 반환하는 방식으로 동작한다. HttpMessageConverter를 사용하여 객체를 적절한 형식으로 변환하고, 이를 HTTP ResponseBody(자바 스프링의 경우 @ResponseBody)에 직접 넣어 클라이언트에게 반환한다. 이 과정에서 별도의 뷰 없이 데이터가 그대로 HTTP ResponseBody에 포함되어 전송된다.이렇게 이해했는데 틀린 부분이 있을까요?틀리거나 어색한 부분 지적 부탁 드립니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ObjectMapper 출력
안녕하세요.강의와 똑같이 코드를 작성 후, jackson 라이브러리 또한 확인했습니다. HelloData 코드도 작성 후 롬복도 추가해 놓았습니다.postman으로 요청시에HelloData helloData = objectMapper.readValue(messageBody, HelloData.class); System.out.println("helloData.username = " + helloData.getUsername()); System.out.println("helloData.age = " + helloData.getAge()); response.getWriter().write("ok"); 이 부분이 출력되지 않아서 질문 남깁니다.오류 메시지는 없습니다.boot 버전은 3.2.0 입니다. 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 시 빈 중복 에러 발생
안녕하세요! 섹션 6 중 컴포넌트 스캔과 의존관계 자동 주입하기 강의 관련 질문 드립니다.OrderServiceImpl@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DisountPolicy disountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DisountPolicy disountPolicy) { this.memberRepository = memberRepository; this.disountPolicy = disountPolicy; } ... }(DisountPolicy 는 처음 클래스 명 설정할 때 오타가 나서 그냥 그대로 쭉 사용하고 있습니다..) AutoAppConfig를 생성한 후 각 클래스에 @Component 어노테이션을 붙여줬고, OrderServiceImpl 클래스에 @Autowired를 통해 의존 관계를 주입하는 과정에서Could not autowire. There is more than one bean of 'DisountPolicy' type.Beans:discountPolicy (AppConfig.java)rateDiscountPolicy (RateDiscountPolicy.java) 에러가 발생합니다. 원인을 찾아보니 같은 타입의 빈이 여러 개 존재해서 발생하는 에러라고 하는데, 제 코드에서 어떤 부분이 잘못된건지 모르겠어서 질문 드립니다.. AutoAppConfigpackage Hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration @ComponentScan ( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } AppConfig@Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DisountPolicy discountPolicy() { return new RateDiscountPolicy(); } }
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Spring을 이용해 뒤로가기 중복 제출을 막을수도있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]PRG를 이용해서, 불필요한 post요청을 방지하는 내용이 있었는데, 상품을 추가하고 뒤로가기를 누르게되면, 다시 제출했던 폼이 그대로 남아있어서 "추가 -> 뒤로가기 ->추가" 계속 반복적으로 작성할 수 있잖아요?이런거는 spring으로 방지 못하고, javascript로 처리해줘야하나요
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
get connection 로그가 6개 나오는 이유가 궁금해요
여기 로그를보면 get connection 로그가 6개가나오는데요 save ,findById, update, delete 4번을해서 로그가 4번이 나올줄알았는데 왜 커넥션로그가 6번 나왔는지 궁금해요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Java Hotspot Warning 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.이게 뜨는데 어떻게 해결하나요?? 실행은 잘되는데 거슬리네여
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
안녕하세요, 다름이 아니라 톰캣 설치 과정에서 막히는 부분이 있어서 문의드립니다.
안녕하세요, 다름이 아니라 톰캣 설치 과정에서 막히는 부분이 있어서 문의드립니다.톰캣 8.5로 진행해야 하는데 하단 이미지에 보시다 시피8.0까지만 있고 8.5가 없어서 진행이 불가능합니다. 어떤 오류인지 문의드립니다!!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello 에서 404 에러 뜹니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.