묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방향,단방향 및 방향에 관해서 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]저희 예제에서는 없었지만 A라는 엔티티가 있고 B라는 엔티티가 있는데 A와 B는 1대N관계라고 할때 A를 통해 B를 사용하지만 그렇다고 B로 A를 찾아가진 않습니다.(즉 A에서 B로 단방향 연관관계를 맺고 싶은 상황입니다)그런데 다 쪽(B)에 항상 외래키가 있어야하므로 @ManyToOne(JoinColumn...을 쓰면 B에서 A로 가는 방향도 자동으로 설정되는 것아닌가요?그렇게 되면 어쩔수 없이 양방향 연관관계로 사용할 수 밖에 없나요??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
N+1문제
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저번 챕터에서 나왔던 X to one 에서 n+1문제가 있어서 패치조인으로 최적화를 했었는데 이번에 X to many 문제에서 발생하는 데이터 뻥튀기 문제도 n+1문제라고 할 수 있나요?
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
AbstractAuthenticationProcessingFilter내에서 HttpServletResponse값이 안들어갑니다
@Bean public SecurityFilterChain httpSecurity(HttpSecurity http) throws Exception { return http.cors().disable() .csrf().disable() .httpBasic().disable() .formLogin().disable() .authorizeRequests().anyRequest().authenticated() .and() .addFilterAt(authFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterAt(jwtFilter(), UsernamePasswordAuthenticationFilter.class) .build(); } @Bean public WebSecurityCustomizer webSecurityCustomizer() { return web -> { web.ignoring().requestMatchers().antMatchers("/h2/**"); }; } @Bean public AuthFilter authFilter() throws Exception { var authFilter = new AuthFilter(); authFilter.setAuthenticationManager(authenticationConfiguration.getAuthenticationManager()); authFilter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/")); authFilter.setAuthenticationFailureHandler(new SimpleUrlAuthenticationFailureHandler("/error")); return authFilter; }설정은 위와 같이 했습니다.@Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { super.successfulAuthentication(request, response, chain, authResult); String SECRET = "secrsdkfjhjh4243j234jh2SDdsfjhgsdfhjgjFQQQQdasd1et"; Claims claims = Jwts.claims(); claims.put("username", SecurityContextHolder.getContext().getAuthentication().getName()); String compact = Jwts.builder() .setClaims(claims) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 1시간 .signWith(SignatureAlgorithm.HS256, SECRET) .compact(); response.addHeader("Authorization", compact); response.addCookie(new Cookie("token", compact)); }위와 같이 설정을 했는데 http 요청 테스트를 해보면 설정한 값이 하나도 들어가 있지않습니다.컨트롤러나 OncePerRequestFilter에서 값을 넣어보면 잘 적용됩니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
500 화이트라벨 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]JdbcMemberRepository를 강의pdf에있는 코드 그대로 복사붙여기해서 모든걸 다 import 했는데 500화이트라벨 에러가 뜨네요..어디 부분에서 잘못된걸까요 ?import javax.sql.DataSource; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Optional; public class JdbcMemberRepository implements MemberRepository { private final DataSource dataSource; public JdbcMemberRepository(DataSource dataSource) { this.dataSource = dataSource; } @Override public Member save(Member member) { String sql = "insert into member(name) values(?)"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, member.getName()); pstmt.executeUpdate(); rs = pstmt.getGeneratedKeys(); if (rs.next()) { member.setId(rs.getLong(1)); } else { throw new SQLException("id 조회 실패"); } return member; } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public Optional<Member> findById(Long id) { String sql = "select * from member where id = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setLong(1, id); rs = pstmt.executeQuery(); if(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return Optional.of(member); } else { return Optional.empty(); } } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public List<Member> findAll() { String sql = "select * from member"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); List<Member> members = new ArrayList<>(); while(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); members.add(member); } return members; } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public Optional<Member> findByName(String name) { String sql = "select * from member where name = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); rs = pstmt.executeQuery(); if(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return Optional.of(member); } return Optional.empty(); } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } private Connection getConnection() { return DataSourceUtils.getConnection(dataSource); } private void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (pstmt != null) { pstmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { close(conn); } } catch (SQLException e) { e.printStackTrace(); } } private void close(Connection conn) throws SQLException { DataSourceUtils.releaseConnection(conn, dataSource); } }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
8080포트 이미 사용 중
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]HelloSpringApplication을 실행하였을 때 이미 8080번 포트를 사용 중이라는 오류 문구를 출력하길래 cmd에서 8080번 포트를 사용중인 프로세스를 강제 종료하는 방식으로 해결하여서 실행하여 실습을 완료하였습니다. 그런데 컴퓨터를 재부팅 시에 다시 HelloSpringApplication을 실행하게 되었을 때 또 다시 8080번 포트를 사용 중이라고 에러를 띄우는데 매번 실행마다 8080번 포트를 사용 중인 프로세스를 찾아서 강제종료 하는 것은 번거로울 것 같은데 혹시 다른 해결방안을 알 수 있을까요?
-
미해결스프링 시큐리티 OAuth2
안녕하세요! 소셜로그인 관련 질문입니다!
프로젝트MSA 환경에서 프론트는 외부 서버에서 별도로 배포합니다.프론트는 APIGateway 로만 데이터를 교환하고자 합니다.현재 카카오 로그인 기능만 구현하고자 하는데 이를 JWT + Redis 를 활용하여 JWT 토큰을 검증하고 Gateway 에서 검증하고 각 서비스를 호출 하는방식으로 구현하고자 합니다. 제가 이해한게 맞다면 자체 포함타입일거같습니다.플로우는 다음과 같습니다Front kakao click -> kakao 검증 -> 프로젝트 서비스의 회원(member) 별도 저장 이때 Front 요청-> gateway(Auth-client) 로드밸런싱-> Authorization Server(Auth-Server) kakao인증후 User권한 인가 jwt -> Front 요청 -> gateway(redis 에 세션,jwt 저장) 이렇게 될것이라고 생각하고 있었는데 강의를 보다보니 Kakao login 과 jwt 는 client 쪽인 apigateway 에서 구현을 해야하는건가요? 또한 개념적으로 접근하게 된다면 카카오로그인으로 회원을 인증하고 제가 만든 프로젝트의 권한을 인가개념을 분리해야하는건지 어렵더라구요 ㅠㅠ 기존에 모놀리식으로 할땐 검색하며 예제를 복붙하면서 따라하다보니 막상 인증/인가를 분리하려니 어려움을 겪고있습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
controller 에러 입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이런식으로 나오고 타이핑이 안됍니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
cmd 로 다시 또 빌드하는이유가 뭔가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]cmd 로 다시 빌드하는 이유가 그냥 cmd 로도 실행할수 있다는 방법을 소개해주시는 건가요?그리고 cmd 로 빌드를 하면 기존에 인텔리제이로 만든 스프링부트 프로젝트 파일 외 에 build 안에 또 같은게 있는거같은데 중복 파일 이 있어도 돼는건가요? 뭔가 이상해서요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DB가 제공하는 클라이언트라는 말이 잘 이해가 안갑니다.
[질문 내용]강의 1분 24초쯤에 말씀하신com.h2database:h2 - 데이터베이스가 제공하는 클라이언트이 부분이 잘 이해가 안가서 질문 드립니다. 1) 우선 제가 클라이언트-서버 개념만 알고 있는데,클라이언트가 서버에 있는 데이터베이스에 접근해서 데이터들을 요청해서 가져가는 걸로 알고 있는데"데이터베이스가 제공하는 클라이언트"라는 말이 1차적으로 이해가 가지 않습니다. 2) 두 번째로는 이 구문 자체가 의미하는 거 자체가 뭔지 궁금합니다. runtimeOnly 'com.h2database:h2'
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
AWS 과금 조심!
질문글은 아니지만 혹시 저처럼 AWS랑 안 친하신 분들을 위해 과금 조심하시라고 올립니다. 강의 내용에도 설명 해주시지만, 고정IP(아마존에서는 Elastic IP Addresses, 탄력적 IP라고 부르네요)를 생성하고 인스턴스를 연결 안 하거나, 연결된 인스턴스가 running상태가 아니면 하루에 0.12USD정도 나가는 것 같네요.(저는 인스턴스에 연결만 해두면 되는 줄 알고 연결된 인스턴스 꺼놨다가 요금 나갔네요ㅜ.. 수업료가 그나마 싸서 다행입니다. )AWS 강의까지 진행하시는 분들은 참고하셔서 진행하시면 좋을 것 같아요!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
1편 까지 완성된 소스코드를 받을 방법이 있을까요?
2편부터 강의를 보기 시작했는데, 코드를 쳐보면서 따라가고 싶어요. 혹시 2편 내용은 없고 1편 내용까지만 완성된 코드는 어디서 받을 수 있을까요?
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
H2외의 DB를 사용할 때도 AWS에 올리는 것은 똑같은 방식으로 하나요?
강의에서는 H2를 사용하였는데 DB로 MySql, PostgreSql같이 다른 RDBMS를 사용해보려고 합니다. AWS에 올릴 경우 application.properties에 작성한 DB설정 내용과 gradle이 가져오는 라이브러리를 제외하고는 모든 것이 똑같이 하면 되는 걸까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
intellij CE 버전 run configurations 질문있습니다
토비님 안녕하세요. intellij CE 버전에서 spring initializr 로 생성한 프로젝트 실행 시 궁금한게 있습니다. ultimate 버전은 영상에서처럼 run 할 때 우상단에 spring 아이콘이 있고 springboot 플러그인이 적용되어있는데, CE 버전은 그렇지 않고 따로 Run Configurations 가 설정되어있지 않아 아주 동일한 방법으로 실행할 수는 없었습니다. (영상의 "HellobootApplication" 대신 "Current File"로 표시되어있고 실행버튼이 비활성화 되어있습니다.) 일단 main 메소드가 있는 Application.java 파일에서 코드 왼쪽의 실행버튼으로 실행했는데 이렇게 해도 상관 없는건가요? Ultimate 버전과 달리 CE 버전에서 놓치고 가는게 있는지 궁금해서 여쭙니다. 좋은 강의 해주셔서 감사합니다 ~
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
첫 프로그램 설정
강사님이랑 똑같이 다 설정했는데 왜 이렇게 뜰까요 ?
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
@Transactional 애너테이션을 적용해도 매번 session을 맺어서 처리하는 이유
@Transactional(rollbackFor = Exception.class) public int testTran(DatasetList dsList) { Dataset dsParam = DatasetUtil.getGdsParam(dsList); // Dataset을 SQL에 적용할 변수형인 Map으로 변환하면서 사용자 정보 입력 Map mapParam = DatasetUtil.getMap(dsParam, DatasetUtil.UPPER_CASE); int iRes1 = codemap.updateTran1(mapParam); log.info("==================== ||||||22222222222222||||||| ===================="); int iRes2 = codemap.updateTran2(mapParam); //미존재테이블로 에러 발생 log.info("==================== |||||||3333333333333|||||| ===================="); return iRes2; }[2023-06-28 16:07:47:67472] [http-nio-8808-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - POST "/web/common/CodeAction?mode=testTran", parameters={masked}[2023-06-28 16:07:47:67473] [http-nio-8808-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.skcc.nxcus_spring.usrcode.action.codecontroller#testTran(HttpServletRequest, HttpServletResponse)[2023-06-28 16:07:47:67473] [http-nio-8808-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession[2023-06-28 16:07:47:67473] [http-nio-8808-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@628385f5] was not registered for synchronization because synchronization is not active[2023-06-28 16:07:47:67473] [http-nio-8808-exec-3] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource[2023-06-28 16:07:47:67474] [http-nio-8808-exec-3] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [HikariProxyConnection@1752952453 wrapping net.sf.log4jdbc.sql.jdbcapi.ConnectionSpy@4499b10a] will not be managed by Spring[2023-06-28 16:07:47:67474] [http-nio-8808-exec-3] DEBUG c.s.n.m.nxmdb.CodeMapper.updateTran1 - ==> Preparing: UPDATE COM_COMMON_COD SET COMM_NM = 'Transactional111' WHERE COMM_GRP_CD = 'MEMSTS' AND COMM_CD = 'A'[2023-06-28 16:07:47:67474] [http-nio-8808-exec-3] DEBUG c.s.n.m.nxmdb.CodeMapper.updateTran1 - ==> Parameters: [2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG jdbc.sqltiming - com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)1. UPDATE COM_COMMON_COD SET COMM_NM = 'Transactional111' WHERE COMM_GRP_CD = 'MEMSTS' AND COMM_CD = 'A' {executed in 3 msec}[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG c.s.n.m.nxmdb.CodeMapper.updateTran1 - <== Updates: 1[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@628385f5][2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] INFO c.s.n.usrcode.biz.codeservice - ==================== ||||||22222222222222||||||| ====================[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@532be999] was not registered for synchronization because synchronization is not active[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [HikariProxyConnection@471746278 wrapping net.sf.log4jdbc.sql.jdbcapi.ConnectionSpy@4499b10a] will not be managed by Spring[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG c.s.n.m.nxmdb.CodeMapper.updateTran2 - ==> Preparing: UPDATE COM_COMMON_COD SET COMM_NM = 'Transactional2222' WHERE COMM_GRP_CD = 'MEMSTS' AND COMM_CD = 'D'[2023-06-28 16:07:47:67477] [http-nio-8808-exec-3] DEBUG c.s.n.m.nxmdb.CodeMapper.updateTran2 - ==> Parameters: [2023-06-28 16:07:47:67478] [http-nio-8808-exec-3] DEBUG jdbc.sqltiming - com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)1. UPDATE COM_COMMON_COD SET COMM_NM = 'Transactional2222' WHERE COMM_GRP_CD = 'MEMSTS' AND COMM_CD = 'D' {executed in 1 msec}[2023-06-28 16:07:47:67478] [http-nio-8808-exec-3] DEBUG c.s.n.m.nxmdb.CodeMapper.updateTran2 - <== Updates: 1[2023-06-28 16:07:47:67478] [http-nio-8808-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@532be999][2023-06-28 16:07:47:67478] [http-nio-8808-exec-3] INFO c.s.n.usrcode.biz.codeservice - ==================== |||||||3333333333333|||||| ====================[2023-06-28 16:07:47:67478] [http-nio-8808-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK @Transactional 애너테이션을 적용해도 각각의 sql 마다 매번 session을 맺어서 처리하는데요. 이유를 잘 모르겠습니다. 설정문제일까요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
테스트(Matchers.is) 질문드립니다.
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(Matchers.is(2)))위 코드와 아래코드 모두 정상적으로 통과하는걸 확인하였는데요.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(2))수업에서는 Matchers.is()를 사용하셨는데 위 코드 문맥에서 is()를 굳이 왜 사용하셨는지 궁금해서 질문드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
이해가 잘 안돼서 여쭤봅니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]url에 root주소/test를 입력하면 컨트롤러에서 /test에 해당하는 함수를 찾아가서 스프링부트가 모델을 생성하고 return으로 템플릿에 있는 test를 찾는다. ⇒이게 맞는건가요? 이건 점프투스프링에 있던건데 왜 인자로 model이 안 들어간걸까요?바로 문자열 리턴하기 때문인가요?바로 저 문자열을 리턴하는 이유는 기본적으로 템플릿 폴더에서 resources:templates/+{ViewName}+’.html’으로 매핑 한다는데 해당 템플릿 파일이 없기 때문인가요?model을 왜 써야 하는건가요?
-
미해결스프링 부트 - 핵심 원리와 활용
윈도우 사용자분들 cmd에서 톰캣 오류 혹은 빌드 오류 날때..
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니오[질문 내용]질문은 아니고 혹시 저와 같은 상황이 있을 것 같은 분들을 위해 몇 글자 적어보자면윈도우 cmd에서 빌드할 때 gradlew build 나 톰캣 catalina run 이런 명령어가 Unrecognized option: ~~ 이런식으로 나온다면 그냥 윈도우 powershell을 사용하는 걸 추천드립니다..Unrecognized option: -djava.util.logging.config.fileorUnrecognized option: -xmx64m등등..이상하게 cmd에선 대문자 옵션이 소문자로 바뀌어서 인수로 인식을 못하더라구여ㅠ.. 결론 ! => powershell 쓰면 해결가능합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
out 폴더 삭제 후 error page
홈화면과 레이아웃 강의에서 css적용이 안되길래 방법을 찾아보다가 out폴더 삭제 후 reload disk를 하면된다는 글을 보고 out폴더를 삭제했는데 아예 error page가 뜹니다ㅜㅜ 원래는 css적용만 안되는 오류였는데 아예 실행이 안되네요..out폴더를 되돌릴 수가 없어서 방법이 있을까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Repository 인터페이스를 설계할 때 메소드 이름을 spring data jpa를 고려해서 해야 하나요?
스프링 데이터 JPA를 대비해서 메소드 이름을 그에 맞게 정해두셨다고 하셨는데요. 실무에서 스프링 데이터 JPA 말고 다른 기술을 결정했을 때도 메소드 이름을 그렇게 설계하는지 궁금합니다.예를 들어서 mybatis를 사용해서 프로젝트를 진행한다고 결정했을 때 먼저 Repository 인터페이스를 설계 할텐데 인터페이스 메소드 이름을 스프링 데이터 JPA 형식에 맞지 않게 정했다면 나중에 스프링 데이터 JPA로 변경하기 곤란할 것 같습니다.실무에서 스프링 데이터 JPA 말고 다른 기술을 사용하기로 결정했을 때도 이후에 스프링 데이터 JPA로 변경될 가능성을 고려해서 스프링 데이터 JPA의 Repository 메소드 이름 형식을 사용하나요?만약 스프링 데이터 JPA 메소드 이름 형식을 사용하지 않는다면 어떻게 해결하는지도 궁금합니다.