inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

update 로직 질문

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

멤버 업데이트 시 memberService.update(id, request.getName()); 으로 작성해 주셨는데 memberService.update(id, request); 와 같이 객체를 통째로 넘기지 않는 이유가 있는 것인가요? 위와 같이 객체를 통째로 넘기는 경우 UpdateMemberRequest 클래스를 이너 클래스가 아닌 별도의 클래스로 분리해 줘야 하는 게 맞나요?

  • java
  • spring
  • spring-boot
  • jpa
gnstjrdlsla 댓글 1 좋아요 0 조회수 135

JdbcMemberRepository 문제

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 어떤 점이 문제인지 모르겠습니다 ㅜ jdbcMemberRepository package hello.hello_spring.repository; import hello.hello_spring.domain.Member; import org.springframework.jdbc.datasource.DataSourceUtils; 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); } } MemberRepository package hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { Member save(Member member); void finById(Long id); Optional<Member> findById(Long id); Optional<Member> findByName(String name); List<Member> findAll(); void cleatStore(); } MemoryMemberRepository package hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.Map; import java.util.Optional; import java.util.*; public class MemoryMemberRepository implements MemberRepository { public static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId((++sequence)); store.put(member.getId(), member); return member; } @Override public void finById(Long id) { } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable((Member) store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } @Override public void cleatStore() { } void clearStore() { store.clear(); } } error error: JdbcMemberRepository is not abstract and does not override abstract method cleatStore() in MemberRepository public class JdbcMemberRepository implements MemberRepository{

  • java
  • spring
  • mvc
  • spring-boot
이윤솔 댓글 1 좋아요 0 조회수 271

제네릭클래스는 타입매개변수를 통해 타입을 결정하는데 이 타입을 메인에서 전달받는다면 의존성 주입과 IoC로 볼수 있나요?

미해결

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 제네릭클래스는 타입매개변수를 통해 타입을 결정하는데 이 타입을 메인에서 전달받는다면 의존성 주입과 IoC로 볼수 있나요? 제가 생각하는 IoC는 한 오브젝트에서 무언가를 결정해야하는데 이것이 다른 오브젝트에 의해 결정되는 것입니다. 이때 제 기준으로는 제네릭클래스는 내부적으로 타입을 결정해야하지만 이 타입이 메인과 같은 함수에 의해 타입을 전달받아 전달받은 타입으로 타입을 결정하므로 IoC에 부합한다고 생각합니다. 또한 외부에서 타입을 주입받으므로 의존성 주입에도 부합하다고 생각합니다. 혹시 제 생각이 틀렸나요?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
예비군갈나이 댓글 1 좋아요 1 조회수 172

클래스 상수 선언

미해결

김영한의 실전 자바 - 기본편

안녕하세요. 만약 flag 값이 1이면 데이터를 빨간색으로 표기한다 라고 가정했을때 private static final String RED = "1"; if(param.getFlag().equals(RED)){ .... 빨간색 표기 로직 } 저는 이런식으로 상수를 선언해 추후 소스를 봤을때 "1" 이라는 코드가 뭘 나타내는지 이해하기 쉽게 개발을 진행하고 있습니다. 근데 static 변수와 같은경우 메모리에 계속 떠있다보니 클래스에서 이런식으로 static 변수를 계속 선언하는것이 메모리 부족에 영향을 끼치지는 않을지? 걱정이 들기 시작했습니다. 톰캣 서버의 jvm 메모리가 1gb 라고 가정했을때 메모리 걱정을 하지않고 static 변수를 선언해도 괜찮을까요? 아니면 이런 경우 그냥 static 키워드를 제거하고 private final String RED = "1"; 이렇게 사용해서 gc 의 대상이 되도록 하는게 바람직할까요?

  • java
  • 객체지향
backendman 댓글 2 좋아요 1 조회수 148

cat

미해결

Linux Command-Line 명령어 기초 배우기

cat 1> cat > 둘다 되는거 같은데 1을 왜 쓰나요?

  • linux
jwhong1515 댓글 1 좋아요 0 조회수 150

중급, 고급 강의 계획도 있으신가요?

해결됨

Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)

안녕하세요. 열심히 강의 수강하고 있는 학생입니다. 강의가 너무 알차고 설명도 잘 해주셔서 즐겁게 보며 배우고 있는데 제목과 같이 중급, 고급 강의 계획도 있으신지 궁금합니다. 하신다면 무조건 구매(?) 할 생각인데 계획이 없으셨다면 고민 한번 부탁드리며 좋은 강의 다시금 감사드립니다.

  • ios
  • firebase
  • swiftui
  • 중급
  • 고급
Reach 댓글 1 좋아요 1 조회수 160

혹시 다음 강의는 언제쯤 나올 예정일까요~?

미해결

신입사원에게 들려주는 - MCU SW 직무 기초 개념완성

기대 되는게 많아서 혹시 다음 강의는 어떤건지 알 수 있을까요?

  • MCU
아구러푸 댓글 1 좋아요 0 조회수 197

Retrieve 후 LLM 답변 관련 문의

미해결

RAG를 활용한 LLM Application 개발 (feat. LangChain)

안녕하세요? 강의 따라서 해보고 있는데, 질문할 때마다 답을 다르게 합니다. 이런 부분은 어떻게 해야 주로 정답을 이야기 할까요? 항상 정답을 이야기하면 좋겠으나 그렇지 않습니다. (3.5/3.6강 까지 들었습니다. 너무 여러 번 물어봐서 그런걸까요?)

  • vector-database
  • llm
  • langchain
  • rag
  • openai-api
mikaaaaa 댓글 1 좋아요 0 조회수 218

안녕하세요 강사님 SRP에 관한 질문입니다!

미해결

Readable Code: 읽기 좋은 코드를 작성하는 사고법

이번 강의 내용과 관련하여 JPA를 사용하여 CRUD를 구현할 때 질문입니다! JPA를 이용한 간한단 CRUD를 구현할 때, POST와 USER Entity는 서로 연관관계 매핑이 되어있습니다. Post(게시글)을 작성한다고 가정하면 PostService에는 UserRepository를 사용하여 User객체를 얻어야 하는데, 이러한 경우 단일 책임 원칙 위반이라고 얘기할 수 있는 건가요? 댓글을 작성한다고 가정하면, CommentService에 UserRepository, PostRepository를 사용하여 User와 Post 객체를 얻어야 합니다. 제가 생각했을 때 이러한 경우 단일 책임 원칙이 위반 되었는지가 궁금합니다. 게시글 작성, 댓글 작성이라는 행위에 다른 도메인이 침투해있으니까 단위테스트 작성도 어렵고 가독성이 떨어진다고 생각하는데, 맞을까요? 그럼 2번을 개선하기 위해서는 어떻게 해야 되는지 궁금합니다. 너무 얘기가 길어지면 어떤 책or글을 참고하는게 좋을지 가르쳐주시면 너무 감사하겠습니다!! 강사님 이전 테스트 코드 강의도 보고 지금 강의도 보고있지만 아직 너무 어려워서 따라가기가 힘드네요 ㅠㅠ.... 항상 감사합니다!

  • 객체지향
  • 리팩토링
  • 클린코드-기획전
진짜 잘하고싶다 댓글 2 좋아요 0 조회수 258

강의 내용이 24년 현재 버전과 너무 다릅니다.

미해결

따라하며 배우는 리액트 네이티브 기초

강의내용이 24년 현재 9월 듣고 있는데 강의 내용과 내려받는 리엑트 네이티브 파일구조가 달라서 너무 어렵습니다. 현재 강의 맞는 구버전으로 하면 expo app 버전이 구버전과 맞지 않는다고 하거나 강의 보면서 하기도 벅찬데 각종 버전에 따른 오류가 너무 많이 나오니 해결하면서 강의 듣기에 너무 힘듭니다. 뭔가 방법이 없을까요? 제가 너무 배우고 싶었던 리엑트 네이티브 강의인데 초반에 오류 수정하다 끝나고 이러니 의지가 꺽여버립니다.

  • react
  • react-native
  • expo
Mr.Everything 댓글 2 좋아요 0 조회수 329

Apache Tomcat 8 제공 여부문의

미해결

파일 업로드 취약점 고급 공격 기법 PART2-1 : 파일 업로드 라이브러리 분석과 공격 방법론

안녕하세요, 수강생입니다. Apache 공식 홈페이지에서 Tomcat 8 다운로드 지원을 안하네요. Not Found The requested URL was not found on this server. 혹시 Tomcat 8버전 공유 받을 수 있을지요?

  • 모의해킹
김진수 댓글 1 좋아요 0 조회수 108

실행 오류 도와주세요.

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 삼각형 눌러서 실행시키면 다음과 같은 에러가 뜹니다. 구글링 참고해서 세팅 바꿔보았는데도 해결이 안돼요 도와주세요 ㅠㅠ Error: LinkageError occurred while loading main class Hellooo java.lang.UnsupportedClassVersionError: Preview features are not enabled for Hellooo (class file version 66.65535). Try running with '--enable-preview'

  • java
  • 객체지향
before1995 댓글 1 좋아요 0 조회수 249

Ascii코드

해결됨

독하게 시작하는 C 프로그래밍

아스키코드가 7비트로 이루어져있고 1바이트 단위로 통신할 때 나머지 1비트는 패리티 코드로 쓰게 되어 있는걸로 아는데 이 1비트를 패리티 코드 대신 각 컴퓨터 회사마다 마음대로 쓸 수 있게 해준건가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
8imcs 댓글 1 좋아요 0 조회수 145

Native code

해결됨

독하게 시작하는 C 프로그래밍

넓고 얕게 외워서 컴공 전공자 되기 25강 독하게 시작하는 C프로그래밍 11강 에 Native 코드라는 설명을 해주시는데 25강 내용에서는 high level 언어 예시를 C언어라고 말씀하시면서 이러한 C언어를 OS와 CPU에 의존성을 가진 native code라고 설명을 해주셨습니다. 그래서 native code가 high level 언어에 속하는 줄 알았는데 11강 내용에서는 CPU에 의존성을 지닌 코드를 Native code라고 설명하시면서 c언어는 우리가 알아먹을 수 있는 언어로 되어있지만 Native code는 2진수로 표현이 되어있다고 하시고 Native code를 저급어에 속한다고 설명을 해주시더군요 어느 강의가 맞는 설명인가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
8imcs 댓글 3 좋아요 0 조회수 192

3-H 메모리 초과 질문드립니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요, 선생님. 코딩테스트를 대비하여 선생님의 강의를 열심히 듣고 있습니다. 3-H 문제를 푸는데 있어서 다음의 로직을 사용하여 선생님의 코드를 수정해보았는데요. prev 배열 내 원소에 0이 아닌 값을 할당하므로 이를 통해 방문 처리를 할 수 있다는 점. v 벡터를 이용하여 가장 빠른 시간을 알 수 있다는 점. 이에 visited와 ret 없이 코드를 수정해봤습니다. http://boj.kr/20c1cc00bed04b9692711c09e0c2c852 그런데 오히려 메모리 초과가 발생하였습니다. 수정된 코드는 사용된 변수가 적음에도 불구하고 오히려 메모리 사용이 더 많아졌는데, 그 이유를 알고 싶습니다. 감사합니다!

  • c++
  • 코딩-테스트
솔라빔131 댓글 1 좋아요 0 조회수 102

scanf_s 관련 질문 있습니다.

해결됨

독하게 시작하는 C 프로그래밍

강의를 통해 많은 도움 얻고 있습니다. 감사합니다. 문의드릴 내용은, 섹션 10번 필수실습 문제(평균값, 시분초)에서 scanf_s 사용시 %d 뒤에 *c를 써야 하는 거 아닌지요? *c를 안 쓰면, 뒤의 행들이 실행되지 않고 중간에 중단되어야 하는 거 아닌지 문의드립니다. 답변 미리 감사드립니다.

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
홍원기 댓글 1 좋아요 0 조회수 120

6-M 질문있습니다 :)

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

아무리 생각해도 저는 선생님이 안계셨으면 정말 큰일났을 것 같습니다.. ^^;; 제 풀이를 디버깅해봤는데요, cnt배열의 값이 문제없이 정확하게 들어가있습니다. 제 수준으로는 무엇이 잘못된지 알기가 어려워서 질문 드립니다..!! http://boj.kr/a69fdee058074fabbc1b33d7beb083c5

  • c++
  • 코딩-테스트
한유태 댓글 1 좋아요 0 조회수 79

6-L 질문있습니다 :)

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님 🙂 맞왜틀에 자꾸 걸리는거 같습니다 ㅠㅠ 테스트케이스도 맞고 생각도 꽤 많이 하고 조건을 체크했다고 생각하는데 자꾸 틀리니 스트레스가 이만저만이 아니네요 ㅠㅠ 이번 아이디어는 누적합을 기반으로 풀이하였습니다. 뺄셈을 하는 대신 나눗셈을 하면 될 것이라 판단하였구요, arr[0]의 값을 1.0으로 설정하였습니다. 또한, 연속된 수의 곱이니 곱연산이 일어나지 않는 경우는 2중 for문에서 j < i - 1로 처리해주었습니다. http://boj.kr/c016e1a3b9d54cb487564acfe350c3d4 앞에서 드리는 질문들도 계속해서 맞왜틀인걸로 미루어보았을 때, 제가 무언가 생각을 잘못하고 있는걸까요?

  • c++
  • 코딩-테스트
한유태 댓글 1 좋아요 0 조회수 108

텍스트 변환 Mark에 대하여 질문이 있습니다.

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

EffectAction에서 public string BuildDescription(Effect effect, string description, int stackActionIndex, int stack, int effectIndex) { var stringsByKeyword = GetStringsByKeyword(effect); if (stringsByKeyword == null) return description; if (stack == 0) // ex. description = "적에게 $[EffectAction.defaultDamage.0] 피해를 줍니다." // defaultDamage = 300, effectIndex = 0, stringsByKeyword = new() { { "defaultDamage", defaultDamage.ToString() } }; // description.Replace("$[EffectAction.defaultDamage.0]", "300") => "적에게 300 피해를 줍니다." description = TextReplacer.Replace(description, "effectAction", stringsByKeyword, effectIndex.ToString()); else // Mark = $[EffectAction.Keyword.StackActionIndex.Stack.EffectIndex] description = TextReplacer.Replace(description, "effectAction", stringsByKeyword, $"{stackActionIndex}.{stack}.{effectIndex}"); return description; } 여기 부분에서 왜 굳이 스택 0번째 인걸 구분하고 Effect에서 여기에서 public string BuildDescription(string description, int effectIndex) { Dictionary<string, string> stringsByKeyword = new Dictionary<string, string>() { { "duration", Duration.ToString("0.##") }, { "applyCount", ApplyCount.ToString() }, { "applyCycle", ApplyCycle.ToString("0.##") } }; description = TextReplacer.Replace(description, stringsByKeyword, effectIndex.ToString()); description = Action.BuildDescription(this, description, 0, 0, effectIndex); // 여기부분에 질문이 있습니다 여기에서 0번째 것을 구분하고 var stackGroups = StackActions.GroupBy(x => x.Stack); foreach (var stackGroup in stackGroups) { int i = 0; foreach (var stackAction in stackGroup) description = stackAction.BuildDescription(this, description, i++, effectIndex); }// 여기에서 1스택이상 스킬의 텍스트를 전부 변환해주는데 return description; } EffectStackAction에서 public string BuildDescription(Effect effect, string baseDescription, int stackActionIndex, int effectIndex) => action.BuildDescription(effect, baseDescription, stackActionIndex, stack, effectIndex); 이렇게 까지 분리해서 텍스트로 변환하는지 여쭤보고 싶습니다. 그냥 0번째부터 텍스트를 변환하면 안되는건지 질문이 있습니다.

  • unity
  • modules
고우진 댓글 1 좋아요 0 조회수 136

인기 태그

인프런 TOP Writers

주간 인기글