약간 이해가 더딘가 싶어서 고민이 있습니다..
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 내용] 이해가 애매하게 되는 느낌이에요. 이럴때 어떤 선택이 더 나을까요? 그냥 계속 mvc 2편 으로 넘어가서 쭉쭉 로드맵 다 보고 다시 보기 1편을 한번더 보고 2편으로 넘어가기 둘중에 어떤게 더 맞는 선택일까요?
- spring
- mvc
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 내용] 이해가 애매하게 되는 느낌이에요. 이럴때 어떤 선택이 더 나을까요? 그냥 계속 mvc 2편 으로 넘어가서 쭉쭉 로드맵 다 보고 다시 보기 1편을 한번더 보고 2편으로 넘어가기 둘중에 어떤게 더 맞는 선택일까요?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ServletApplication 메인함수가 1분넘어서까지 컴파일을하는데 왜 그럴까요 ㅠㅠ
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 8분 52초경에 findById 쿼리문 옆에 id를 입력하지 않아서 오류가 떠야하는데 저는 통합테스트를 똑같이 돌렸는데도 그냥 진행이 됩니다 왜 저는 오류가 안 뜰까요?
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] MvcMemberSaveServlet입니다. package hello.servlet.web.servletmvc; import hello.servlet.domain.member.Member; import hello.servlet.domain.member.MemberRepository; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberSaveServlet extends HttpServlet { // 싱글톤으로 설정하여 인스턴스를 가져와야함 private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 브라우저에서 넘어온 값 변수로 설정하기 String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); // 파라미터 읽어온 값은 스트링이기 때문에 int형으로 변환을 해주어야 한다. // 자바 코드로 작성한 멤버 객체를 브라우저에서 넘어온 값으로 생성, 저장 Member member = new Member(username, age); memberRepository.save(member); // Model에 데이터를 보관해야 한다. request.setAttribute("member", member); // request객체 내부에 저장소에 저장하는 기능임 String viewPath = "WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } } save-result.jsp입니다. <li>태그가 인식이 이상하게 되는거 같습니다. 중간에 줄바꿈이 안되요 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 성공 <ul> <li>id= ${member.id}</li><li>username=${member.username}</li> <li>age=${member.age}</li> </ul> <a href="/index.html">메인</a> </body> </html> new-form.jsp입니다. <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="save" method="post"> username: <input type="text" name="username" /> age: <input type="text" name="age" /> <button type="submit">전송</button> </form> </body> </html> 어느 부분에서 틀린건지 찾아봐도 모르겠습니다 .ㅠ
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
이전 강의 따라 진행할때도 id가 1, 2, 34 이렇게 숫자가 갑자기 증가해서 실수한 줄 알고 테이블 드랍 후 진행했었는데 다음 강의 따라 진행하는 과정에서도 이 문제가 발생합니다! 이번 강의에서는 delete from member 로 테이블 데이터를 날리기 전부터 이 문제가 발생했고 무시하고 진행한 후 테스트하는 과정에서도 이렇게 숫자가 급격하게 증가해버리네요... 어떤 부분에서 문제가 생긴걸까요...?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 영한님은 jsp파일을 생성하시면 기본 html 태그들이 자동 완성 되어 나오시는데 저는 그저 빈 파일만 생성이 됩니다. 무료와 유료의 차이인것인가요?
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[질문 내용] 스프링을 활용한 실무코드를 다루는 부분에 관한 질문이였는데 답변이 실무에서 사용하는 방식은 스프링 MVC - 실용적인 방식편에서 다룬다는 답변이였는데 커리큘럼을 뒤져봐도 그런목차나 제목을 가진게 없어서 여쭤보고싶습니다 혹시 어디일까요?
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] HttpSession 1. getSession / setAttribute 다른 질문들의 답변을 보니 세션 저장소가 Map<JSESSIONID, Map<String, Object>>형태로 저장되어 있다고 하셨는데 getSession이 request에 담겨 있는 cookie(JSESSIONID)값으로 세션 저장소에서 Map<String, Object>을 반환하고 이 것을 세션이라고 하는건가요? 그리고 getSession(true)일 때 세션이 없으면 세션을 생성하는데, 세션을 생성할 때 JSESSIONID를 만들어서 response에 cookie로 보내고, 세션 저장소에 만들어진 JSESSIONID를 key, 빈 Map을 value로 저장하고, 비어 있는 Map<String, Object>을 반환하나요? 그리고 setAttribute로 Map<String, Object>에 값을 저장하는건가요? 2. getAttribute getAttribute할 때는 request에 있는 JSESSIONID로 세션 저장소에서 Map<String, Object>을 찾고, LOGIN_MEMBER값으로 실제 Object(Member)를 찾는 걸까요? 3. 마지막으로 세션 저장소가 Map<JSESSIONID, Map<String, Object>> 형식인데 JSESSIONID가 각 member별로 생성되니까, value가 Map<String, Object> 형식이지만 이 맵에는 실제로는 한 쌍의 key, value만 저장되는건가요?
해결됨
김영한의 실전 자바 - 기본편
보통 메모리 구조라고 하면 코드, 데이터, 힙, 스택 영역으로 알고 있습니다. 근데 실행 프로그램이 자바 코드로 이루어져 있다면 메모리 구조는 메서드, 스택, 힙 영역으로 이루어지는건가요? 메서드 영역에 클래스 즉 코드들이 올라간다 했는데 그러면 CPU가 메서드 영역에 있는 자바 코드들을 하나씩 레지스터로 fetch해서 decode, execution 하는건가요? CPU가 클래스 코드들을 해석하면서 메서드 호출일 경우 스택 영역에 스택 프레임을 생성하고 인스턴스 생성일 경우 힙 영역에 인스턴스를 생성하는 건가요? 힙 영역에 인스턴스가 생성된다고 했는데 그러면 필드 코드는 여전히 메서드 영역에 존재하지만 인스턴스가 가지고 있는 필드 값들은 힙 영역에 존재하는 건가요? 감사합니다.
해결됨
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
import hello.servlet.domain.member.Member; import hello.servlet.domain.member.MemberRepository; import hello.servlet.web.frontcontroller.ModelView; import hello.servlet.web.frontcontroller.v3.ControllerV3; import java.util.Map; public class MemberSaveControllerV3 implements ControllerV3 { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override public ModelView process(Map<String, String> paraMap) { String username = paraMap.get("username"); int age = Integer.parseInt(paraMap.get("age")); Member member = new Member(username, age); memberRepository.save(member); ModelView mv = new ModelView("save-result"); mv.getModel().put("member", member); return mv; } } 안녕하세요 . mv.getModel().put("member", member); 'put(java.lang.String, java.util.Objects)' in ' java.util.Map ' cannot be applied to '(java.lang.String, hello.servlet.domain.member.Member)' 요청 타입은 오브젝트이지만 제공된 것은 Member가 제공되어 다음 단계로 진행을 못하고 있습니다.
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @GetMapping public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model){ if(memberId == null){ // 로그인 안한 사람 return "home"; } Member loginMember = memberRepository.findById(memberId); if(loginMember == null){ // 쿠키가 있어도 db에 없는 경우 return "home"; } model.addAttribute("member", loginMember); return "loginHome"; } 홈 컨트롤러에서 로그인을 아예 한 적이 없으면 쿠키가 없어서 return "home"인 게 이해가 되는데 두 번째에 쿠키가 있어도 회원이 db에 없는 경우가 무슨 상황인지 잘 이해가 되지 않습니다. 쿠키가 있으려면 회원 로그인을 해야 하는데 회원이 db에 없을 수 있는지 궁금합니다
미해결
재고시스템으로 알아보는 동시성이슈 해결방법
안녕하세요. 분산락을 언제 쓰는게 좋을지 고민하다가 몇 가지 궁금증이 생겨 질문드립니다. 분산 DB 환경이 무엇을 의미하는지? 흔히 분산 DB 환경에서 낙관적, 비관적 락으로 동시성 문제를 해결하기 힘들다고 얘기하더라고요. 여기서 말하는 분산 DB 라는 것이 샤딩에 의해 여러 DB 서버가 있는 것인지, 동일한 데이터를 저장하는 DB 서버가 여러 대 있는 환경을 의미하는 것인지 모르겠습니다. 예를 들어, Ticket 이란 데이터를 저장하는데 동일한 ticket 데이터가 DB server 1, DB server 2 에 저장되어 있는 환경일까요?? 만약 분산 DB 가 샤딩인 경우 비관적 락으로도 동시성 이슈를 해결할 수 있을 것 같은데 맞을까요? 아래 그림처럼 ticketId = 1 인 티켓을 예매하기 위한 요청이 동시에 올 경우 입니다. 처음 x-lock 을 잡은 요청이 끝나야 뒤늦게 온 요청이 해당 티켓의 잔여 수량을 확인하고 예매 하기 때문에 샤딩으로 인한 분산 DB 에서는 비관적 락으로 동시성 이슈를 해결할 수 있을 것 같습니다. 동일한 Ticket 데이터가 여러 DB 서버에 중복되어 저장된 분산 DB 환경에서는 분산락을 사용해야 될 것 같습니다. 그러나, 샤딩은 동일한 Ticket 데이터에 접근하기 위해서는 동일한 서버로 접근하기 때문에 비관적 락으로도 충분히 해결 가능할 것 같아서 질문 드립니다!
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] home.html까지 만들고 run을 했는데Action:Consider defining a bean of type 'hello.hellospring.domain.Member' in your configuration.Process finished with exit code 1 이런 오류가 뜹니다.domain.Member는 package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 입니다.
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. java.lang.NullPointerException: Cannot invoke "hello.jdbc.repository.MemberRepositoryV1.save(hello.jdbc.domain.Member)" because "this.memberRepository" is null memberRepositoryV1.save 하는 과정에서 널포인터익셉션이 났습니다. package hello.jdbc.repository; import hello.jdbc.connection.DBConnectionUtil; import hello.jdbc.domain.Member; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.support.JdbcUtils; import javax.sql.DataSource; import java.sql.*; import java.util.NoSuchElementException; /** * JDBA - DataSource 사용, JdbcUtils 사용 */ @Slf4j public class MemberRepositoryV1 { private final DataSource dataSource; public MemberRepositoryV1(DataSource dataSource) { this.dataSource = dataSource; } public Member save(Member member) throws SQLException { String sql = "insert into member(member_id, money) values (?,?)"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); return member; }catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, null); } } public Member findById(String memberId) throws SQLException { String sql = "select * from member where member_id=?"; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); rs = pstmt.executeQuery(); if (rs.next()) { Member member = new Member(); member.setMemberId(rs.getString("member_id")); member.setMoney(rs.getInt("money")); return member; } else { throw new NoSuchElementException("member not found memberId=" + memberId); } } catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, rs); } } public void update(String memberId, int money) throws SQLException { String sql = "update member set money=? where member_id=?"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setInt(1, money); pstmt.setString(2, memberId); int resultSize = pstmt.executeUpdate(); log.info("resultSize={}", resultSize); }catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, null); } } public void delete(String memberId) throws SQLException { String sql = "delete from member where member_id=?"; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); pstmt.executeUpdate(); }catch (SQLException e) { log.info("db error", e); throw e; }finally { close(con, pstmt, null); } } private void close(Connection con, Statement stmt, ResultSet rs) { JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(stmt); JdbcUtils.closeConnection(con); } private Connection getConnection() throws SQLException { Connection con = dataSource.getConnection(); log.info("get connection={}, class={}", con, con.getClass()); return con; } } package hello.jdbc.repository; import com.zaxxer.hikari.HikariDataSource; import hello.jdbc.connection.ConnectionConst; import hello.jdbc.domain.Member; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.jdbc.datasource.DriverManagerDataSource; import java.net.URL; import java.sql.DriverManager; import java.sql.SQLException; import java.util.NoSuchElementException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @Slf4j class MemberRepositoryV1Test { MemberRepositoryV1 repository; @BeforeEach void beforeEach() { //기본 driverManager - 항상 새로운 커넥션을 획득 // DriverManagerDataSource dataSource = new DriverManagerDataSource(ConnectionConst.URL, ConnectionConst.USERNAME, ConnectionConst.PASSWORD); //커넥션 풀링 HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(ConnectionConst.URL); dataSource.setUsername(ConnectionConst.USERNAME); dataSource.setPassword(ConnectionConst.PASSWORD); repository = new MemberRepositoryV1(dataSource); } @Test void crud() throws SQLException { //save Member member = new Member("memberV2", 10000); repository.save(member); //findById Member findMember = repository.findById(member.getMemberId()); log.info("findMember={}", findMember); log.info("member != findMember {}", member == findMember); assertThat(findMember).isEqualTo(member); //update repository.update(member.getMemberId(), 20000); Member updateMember = repository.findById(member.getMemberId()); assertThat(updateMember.getMoney()).isEqualTo(20000); //delete repository.delete(member.getMemberId()); assertThatThrownBy(() -> repository.findById(member.getMemberId())) .isInstanceOf(NoSuchElementException.class); } }
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
The Web Console server could not be started. Possible cause: another server is already running at http://192.168.0.25:8082 Root cause: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-224] Exception in thread "main" org.h2.jdbc.JdbcSQLNonTransientConnectionException: Exception opening port "8082" (port may be in use), cause: "java.net.BindException: Address already in use: bind" [90061-224] at org.h2.message.DbException.getJdbcSQLException(DbException.java:690) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:212) at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:211) at org.h2.util.NetUtils.createServerSocket(NetUtils.java:177) at org.h2.server.web.WebServer.start(WebServer.java:412) at org.h2.tools.Server.start(Server.java:548) at org.h2.tools.Console.runTool(Console.java:216) at org.h2.tools.Console.main(Console.java:72) Caused by: java.net.BindException: Address already in use: bind at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:565) at java.base/sun.nio.ch.Net.bind(Net.java:554) at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:636) at java.base/java.net.ServerSocket.bind(ServerSocket.java:391) at java.base/java.net.ServerSocket.<init>(ServerSocket.java:278) at java.base/java.net.ServerSocket.<init>(ServerSocket.java:171) at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:207) ... 5 more cmd 에서 h2.bat 실행 시 이렇게 포트가 이미 사용중이라고 뜨는데요 포트 번호 바꿔서 사용해도 될까요? 8083 같은거로요!
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 테스트 코드를 작성하다가 궁금한점입니다! assertion을 사용할 때 JUnit이 아닌 AssertJ 를 추천하는 이유가 있을까요?
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 강의에서는 warn이 뜨고 name이 없다라는 콘솔문구가 뜨는데 저는 창을 들어가보면 에러는 똑같이 나는데 warn이 안뜨네여..
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] java 와 gradle jvm 버전을 17.0.10으로 설정하고 돌렸습니다. 이런 오류가 발생해서 Upgrade Gradle wrapper to 7.2 version and re-import the project를 클릭해서 grdle 버전을 업그레이드 했습니다. 다시 돌리니 이번에는 Cause: class lombok.javac.apt.LombokProcessor (in unnamed module @0x689bd195) cannot access class com.sun.tools .javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools .javac.processing to unnamed module @0x689bd195 lombok과 관련된 오류가 발생해서 구글에 검색해보고 롬복 버전을 바꿨습니다. 다시 돌려봤는데 또 에러가 발생했습니다.. java 버전과 gradle jvm 버전을 맞췄는데 왜 오류가 발생하는지 모르겠어서 질문드립니다..
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 ! 영한 선생님 강의를 들으면서 토이 프로젝트를 진행 중에 있습니다. 다름이 아니라 th:replace를 활용해 템플릿 영역을 헤더, 컨텐츠, 푸터 세 개의 영역이 나뉘어 지지 않고 컨텐츠 코드들이 헤더, 푸터 영역을 침범하더라구요.. header.html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <div th:fragment="header"> <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> <div class="container-fluid"> <a class="navbar-brand" href="#">갱이</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#">SNS</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> ONLINE SHOP </a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">NEW ARRIVAL</a></li> <li><a><hr class="dropdown-divider"></a></li> <li><a class="dropdown-item" href="#">OUTER</a></li> <li><a class="dropdown-item" href="#">TOP</a></li> <li><a class="dropdown-item" href="#">BOTTOM</a></li> <li><a class="dropdown-item" href="#">A/C</a></li> </ul> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> COMMUNITY </a> <ul class="dropdown-menu"> <li><a class="dropdown-item" th:href="@{/board/notice}">NOTICE</a></li> <li><a class="dropdown-item" th:href="@{/board/review}">REVIEW</a></li> <li><a class="dropdown-item" th:href="@{/board/qna}">Q&A</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true">Disabled</a> </li> </ul> <form class="d-flex" role="search"> <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success" type="submit">Search</button> </form> </div> </div> </nav> </div> </html> footer.html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <div class="footer bg-dark fixed-bottom text-white" th:fragment="footer"> <footer> <div class="container"> <ul class="nav justify-content-center pb-3 mb-3"> <li class="nav-item"><a href="#" class="navi-link px-2">Home</a></li> <li class="nav-item"><a href="#" class="navi-link px-2">MyPage</a></li> <li class="nav-item"><a href="#" class="navi-link px-2">FAQ</a></li> <li class="nav-item"><a href="#" class="navi-link px-2">About</a></li> </ul> </div> <!-- SNS 링크 --> <ul class="nav justify-content-center"> <li><a href="https://facebook.com/example"><i class="fab fa-facebook px-2 text-white"></i></a></li> <li><a href="https://twitter.com/example"><i class="fab fa-twitter px-2 text-white"></i></a></li> <li><a href="https://instagram.com/example"><i class="fab fa-instagram px-2 text-white"></i></a></li> <li><a href="https://pinterest.com/example"><i class="fab fa-pinterest px-2 text-white"></i></a></li> </ul> </footer> </div> <!-- Font Awesome 아이콘 JS --> <script src="https://kit.fontawesome.com/a076d05399.js"></script> </html> layout1.html <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- Font Awesome 아이콘 CSS --> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet"> <!-- Required meta tags --> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> <!-- Custom styles for this template --> <link th:href="@{/css/layout.css}" rel="stylesheet"> </head> <body> <!-- th:fragment=header.html 로 치환--> <div th:replace="~{fragments/header :: header}"></div> <div layout:fragment="content" class="content"></div> <!-- th:fragment=footer.html 로 치환--> <div th:replace="~{fragments/footer :: footer}"></div> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js" integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy" crossorigin="anonymous"></script> </body> </html> 혹시 해결 방안이 있을지 조심스레 여쭤드립니다.. 항상 좋은 강의 자료 주셔서 감사합니다 !
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 수업시간에 선생님께서 보시는 베어 정리본은 어디서 볼 수 있나요?