묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
복사붙여넣기 어디에 하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]7분28초에 어마어마한 코드를 복사붙여넣기를 한다고 했는데 어디에다가 붙여놓는걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
코드 복사 붙여넣기가 너무 많아서 어디꺼를 가지고 와야하는데 좀더 설명해주세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]순수 JDBC 를 공부 중인데 너무 복사붙여넣기가 많고 화면을 멈춰도 빨라요...어디꺼를 가지고 와야 붙여넣기를 해도 오류가 안생길까요?ㅜㅜpackage com.example.springpractice.repository; import com.example.springpractice.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; import static java.sql.DriverManager.getConnection; import static org.apache.tomcat.util.descriptor.InputSourceUtil.close; 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; } @Override public Optional<Member> findByName(String name) { return Optional.empty(); } @Override public List<Member> findAll() { return List.of(); } }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
sequence 전략에서 여러 대의 서버가 동시에 번호를 요청하는 경우
sequence 전략에서 여러 대의 서버가 동시에 번호를 요청하는 경우 어떤 방식으로 동작할 지 궁금합니다.allocationSize로 설정한 값을 여러 대의 서버가 같이 공유해서 사용하고, 할당받은 시퀀스 값을 넘어선 번호를 요청한 서버가 DB에서 시퀀스 값을 할당받아 온다.접근하는 서버마다 allocationSize 만큼 할당을 받아서 각자 할당받은 번호를 사용한다. 제 생각에는 서버가 내려가면 사용하지 못한 시퀀스 값은 날라간다는 말씀을 듣고, 각 서버마다 allocationSize 만큼 할당을 받아서 사용할 것 같은데 정확히 어떻게 동작할 지 궁금합니다.
-
미해결스프링 시큐리티 OAuth2
access token 의 용도
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. keycloak,kakao 같은 authorization server 에서 발급하는 access token 은 userinfo 를 가져오기 위한 token 이라고 생각했는데, resource server 같은 자원도 이 토큰으로 접근 하는게 맞는지 궁금합니다. 수업을 위한 예제인지 실제로 이렇게 사용을 많이 하는지요. 카카오같은 인증서버에서 받은 access token 은 카카오에서 유저 정보를 가져오기 위함이고, resource server 의 다른 api 접근 목적은 아니라고 생각했었는데요. 제가 잘못 알고 있었는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
run 실행버튼이 아예 뜨지않습니다. ㅠㅠ
HelloSpringApplication 실행에서 초록색 > 버튼으로 run (실행)하는 창이 뜨지 않습니다.. ㅠㅠ 강의대로 따라했는데, 여기서 진도를 못나가고있어요 ㅠ 마우스를 갖다대도 뜨지않습니다. 김영한강사님 자바 입문편 볼때는 > run 버튼이 잘떳는데 왜 spring에선 강의영상처럼 안뜰까요 ㅠㅠ?=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
unlock()에 synchronized를 걸면 왜 무한루프를 도는지가 이해가 안됩니다..ㅠㅠ
synchronized를 unlock에 걸 필요가 없다는건 이해를 했는데 이것 저것 실험(?)을 해보다가 unlock()에 synchronized를 걸면 무한 대기 상태가 지속되는지 이해가 안됩니다..ㅠㅠ제가 계속 고민을 한 로직으로는 Thread-1이 비즈니스 로직을 실행한 후 finally를 실행해서 락을 반납해 Thread-2가 어느 정도 시간이 지난 후에 락을 받아서 실행이 될 것이라고 생각을 했는데 아니라서 많은 고민 끝에 질문을 남겨봅니다..ㅠㅠ 답변 기다리겠습니다..!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
future.get()
public static void main(String[] args) throws InterruptedException, ExecutionException { SumTask task1 = new SumTask(1, 50); SumTask task2 = new SumTask(51, 100); ExecutorService es = Executors.newFixedThreadPool(2); Future<Integer> future1 = es.submit(task1); Future<Integer> future2 = es.submit(task2); log("작업 시작"); long st = System.currentTimeMillis(); Integer sum1 = future1.get(); long end = System.currentTimeMillis(); log(end - st + "ms"); Integer sum2 = future2.get(); log("task1.result = " + sum1); log("task2.result = " + sum2); int sumAll = sum1 + sum2; log("task1 + task2 = " + sumAll); es.close(); }02:45:32.785 [ main] 작업 시작 02:45:32.785 [pool-1-thread-1] 작업 시작 02:45:32.785 [pool-1-thread-2] 작업 시작 02:45:34.794 [pool-1-thread-1] 작업 완료 result = 1275 02:45:34.794 [pool-1-thread-2] 작업 완료 result = 3775 02:45:34.797 [ main] 2007ms 02:45:34.797 [ main] task1.result = 1275 02:45:34.797 [ main] task2.result = 3775 02:45:34.797 [ main] task1 + task2 = 5050 맨 위 코드를 실행했을 때 위와 같은 출력이 나왔습니다.main 메서드는 BlockingQueue에 등록된 future를 스레드 풀에서 가용 가능한 스레드 만큼 모두 실행 시킨 후에 WAITING 상태로 변경된다고 이해하면 될까요?
-
해결됨실전! 스프링 데이터 JPA
코드를 실행해도 DB에 데이터가 추가되지 않습니다
이 테스트를 실행하면 스프링 데이터 JPA의 save 메서드를 사용했으니 바로 DB에 member 하나가 추가되어야 할 것 같은데, DB를 보니 추가된 데이터가 없습니다.application.yml이 문제인가 해서 ddl-auto 설정을 보니 create로 잘 되어있고, 로그를 보면 sql문은 잘 날아가는데 왜 DB에 저장이 안 되는지를 도저히 모르겠어서 프로젝트 압축 파일을 남깁니다 ㅠㅠhttps://drive.google.com/file/d/1tyWEF3_l80u8Vban3No5q59y-x8sjWqF/view?usp=sharing테스트 코드들은 MemberRepositoryTest 클래스에다가 전부 넣어놨습니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
시퀀스 전략의 allocation 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]서비스가 시작 될때, hibernate가 DB와 connection을 한 뒤, 해당 시퀀스 name기준으로 allocationSize 만큼 미리 값을 갖고와 메모리에 캐싱한뒤에 사용한다는건 이해를 했습니다. 그렇다면, 요즘은 CI/CD Flow를 통해 자동화된 지속적인 통합/배포가 트랜드인 상황에서, 하루에도 여러번 서비스가 업데이트 되어 배포가 될 것이고, 이로 인하여 hibernate는 매번 DB에 새로운 connection을 진행할 텐데, allocationSize=50일 경우 오히려 자원 낭비가 더 심해지는게 아닌지 궁금합니다.
-
미해결스프링 시큐리티 OAuth2
client 의 token 발행 가능 여부
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. keycloak 을 authorization server 로 사용하는데요.키클록에 등록되는 유저와 유저별 권한과 별개로,서비스의 메뉴별 권한을 상세 설정하기 위해서 client 에서 서비스 권한 관리를 하고 메뉴 접근 권한 관련된 token 을 발행한다고 하면, resource-server 에 jwt-set-uri 를 client 서버 endpoint 로 하고, client 에서 jwkset 을 반환하는 방식이 가능한지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberServiceTest 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberServiceTest 하려고 하는데 처음부터 오류뜨고 안돼요Cannot resolve symbol 'junit', Cannot resolve symbol 'Test', Identifier or type expected 이렇게 오류가 3개가 뜹니다. @Test 자체도 안되네요.. 사진첨부 같이 하겠습니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
table not found 현상이 발생합니다.
기본 키 매핑 강의에서 @GeneratedValue의 전략 중 IDENTITY로 코드를 실행하니까데이터베이스에서 member 테이블 자체가 사라지고 인서트 쿼리도 안 나갑니다. 뭐가 문제인지 모르겠네요ㅠㅠ오류 코드는 다음과 같습니다.8월 21, 2024 7:27:28 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]8월 21, 2024 7:27:28 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.4.2.Final8월 21, 2024 7:27:28 오후 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: Loaded JDBC driver class: org.h2.Driver8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001012: Connecting with JDBC URL [jdbc:h2:tcp://localhost/~/test]8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {password=****, user=sa}8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH10001115: Connection pool size: 20 (min=1)8월 21, 2024 7:27:29 오후 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialectWARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)8월 21, 2024 7:27:30 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateServiceINFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)Hibernate:drop table if exists Member cascade8월 21, 2024 7:27:30 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3902bd2c] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.Hibernate:create table Member (id varchar(255) generated by default as identity,name varchar(255) not null,primary key (id))8월 21, 2024 7:27:31 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@6ee99964] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.8월 21, 2024 7:27:31 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL "create table Member (id varchar(255) generated by default as identity,name varchar(255) not null,primary key (id))" via JDBC [Feature not supported: "CHARACTER VARYING(255)";]org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table Member (id varchar(255) generated by default as identity,name varchar(255) not null,primary key (id))" via JDBC [Feature not supported: "CHARACTER VARYING(255)";]at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94)at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233)at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createTables(SchemaCreatorImpl.java:420)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createSequencesTablesConstraints(SchemaCreatorImpl.java:340)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:239)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:172)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:142)at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:118)at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:256)at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145)at java.base/java.util.HashMap.forEach(HashMap.java:1421)at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:142)at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37)at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:315)at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450)at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507)at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55)at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)at hellojpa.JpaMain.main(JpaMain.java:9)Caused by: org.h2.jdbc.JdbcSQLFeatureNotSupportedException: Feature not supported: "CHARACTER VARYING(255)"; SQL statement:create table Member (id varchar(255) generated by default as identity,name varchar(255) not null,[50100-224]at org.h2.message.DbException.getJdbcSQLException(DbException.java:568)at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)at org.h2.message.DbException.get(DbException.java:223)at org.h2.message.DbException.get(DbException.java:199)at org.h2.message.DbException.getUnsupportedException(DbException.java:287)at org.h2.command.ddl.SequenceOptions.getBounds(SequenceOptions.java:316)at org.h2.command.ddl.SequenceOptions.getBounds(SequenceOptions.java:244)at org.h2.schema.Sequence.<init>(Sequence.java:100)at org.h2.table.Column.initializeSequence(Column.java:459)at org.h2.command.ddl.CommandWithColumns.generateSequences(CommandWithColumns.java:103)at org.h2.command.ddl.CreateTable.update(CreateTable.java:113)at org.h2.command.CommandContainer.update(CommandContainer.java:169)at org.h2.command.Command.executeUpdate(Command.java:256)at org.h2.server.TcpServerThread.process(TcpServerThread.java:413)at org.h2.server.TcpServerThread.run(TcpServerThread.java:191)at java.base/java.lang.Thread.run(Thread.java:833)at org.h2.message.DbException.getJdbcSQLException(DbException.java:568)at org.h2.engine.SessionRemote.readException(SessionRemote.java:650)at org.h2.engine.SessionRemote.done(SessionRemote.java:619)at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237)at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262)at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231)at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80)... 21 moreHibernate:/* insert forhellojpa.Member */insertintoMember (name, id)values(?, default)8월 21, 2024 7:27:31 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 42104, SQLState: 42S048월 21, 2024 7:27:31 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Table "MEMBER" not found (this database is empty); SQL statement:/* insert for hellojpa.Member */insert into Member (name,id) values (?,default) [42104-224]8월 21, 2024 7:27:31 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]Process finished with exit code 0
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스레드 기아상태 - 모든 스레드가 wait인 상황
안녕하세요 영한님바로 아래 질문에서 조금 더 의문이 있어 질문드립니다.4분대 그림에서 c0 소비자 스레드는 데이터를 얻고 notify()해서 스레드 대기 집합에 있는 임의의 스레드를 깨울 것입니다.만일 이때 소비자 스레드 c1이 깨어나면, 큐에 소비할 데이터가 없어서 다시 스레드 대기 집합으로 들어갈텐데, 그 다음은 notify()를 호출할 스레드가 없어서 모든 스레드가 WAITING 상태로 대기 집합에 있을 것으로 생각합니다. 그러면 이후 다른 새로 생성된 생산자 스레드가 put()을 호출하지 않는한 모든 스레드가 쉬고 있는 상황에 놓이는게 맞을까요? 결국에는 p1을 깨우지 않는 스레드 기아 상태는 이해되는데,교안에 "최악의 경우 c1 ~ c5 스레드가 반복해서 깨어날 수 있다." 표현에서 스레드들이 계속 연쇄적으로 깨어나는 뉘앙스가 느껴져서 명확히 하고자 여쭤봅니다.
-
미해결김영한의 실전 자바 - 기본편
java-basic 내용 연동했더니 package가 안 만들어져요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.java-basic 파일을 existing sources로 가져왔더니 벌써 다 입력값이 되어있네요 원래 이런가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.계속 빌드 오류가 뜹니다....자바 버전도 17 이상인데 뭐가 문제인걸까요...
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방향 @OneToOne 조회에 대해 질문 있습니다.
@Entity public class Delivery { @Id @Column(name = "delivery_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(fetch = FetchType.LAZY, mappedBy = "delivery") private Order order; private Address address; @Enumerated(EnumType.STRING) private DeliveryStatus status; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public DeliveryStatus getStatus() { return status; } public void setStatus(DeliveryStatus status) { this.status = status; } }@Entity @Table(name = "orders") public class Order { @Id @Column(name = "order_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "delivery_id") private Delivery delivery; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus status; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Delivery getDelivery() { return delivery; } public void setDelivery(Delivery delivery) { this.delivery = delivery; } public LocalDateTime getOrderDate() { return orderDate; } public void setOrderDate(LocalDateTime orderDate) { this.orderDate = orderDate; } public OrderStatus getStatus() { return status; } public void setStatus(OrderStatus status) { this.status = status; } }public class Test2 { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-pu"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); try { tx.begin(); Delivery delivery = new Delivery(); delivery.setStatus(DeliveryStatus.READY); delivery.setAddress(new Address("city", "street", "zipcode")); em.persist(delivery); Order order = new Order(); order.setOrderDate(LocalDateTime.now()); order.setStatus(OrderStatus.ORDER); order.setDelivery(delivery); em.persist(order); // Order 에 fetch = FetchType.LAZY 설정 , delivery 실제 값 사용 { em.flush(); em.clear(); Order findOrder = em.find(Order.class, order.getId()); Delivery findDelivery = findOrder.getDelivery(); System.out.println("findDelivery : " + findDelivery.getStatus()); } tx.commit(); }finally { em.close(); } } }실행결과Hibernate: /* insert for com.mycom.myapp.ex.Delivery */insert into Delivery (city, street, zipcode, status) values (?, ?, ?, ?) Hibernate: /* insert for com.mycom.myapp.ex.Order */insert into orders (delivery_id, orderDate, status) values (?, ?, ?) Hibernate: select o1_0.order_id, o1_0.delivery_id, o1_0.orderDate, o1_0.status from orders o1_0 where o1_0.order_id=? Hibernate: select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from Delivery d1_0 where d1_0.delivery_id=? Hibernate: select o1_0.order_id, o1_0.delivery_id, o1_0.orderDate, o1_0.status from orders o1_0 where o1_0.delivery_id=? findDelivery : READY 강의에서 진행한 Order와 Delivery를 가지고 조회 테스트를 해봤습니다. 우선 Order와 Delivery를 양방향으로 OneToOne 관계를 설정했습니다. 그리고 둘다 각각 지연로딩으로 설정했습니다.em.flush(); em.clear(); Order findOrder = em.find(Order.class, order.getId()); Delivery findDelivery = findOrder.getDelivery(); System.out.println("findDelivery : " + findDelivery.getStatus());그리고 이 부분에 대해 아래와 같이 이해를 했습니다.맨처음 em.find()를 해서 Order에 대해 DB에 select문을 보냅니다. 이때 delivery와는 지연로딩이므로 추가 select가 발생하지 않습니다. 그리고 findDelivery.getStatus()); 에서 delivery의 실제 값을 사용하므로 이때 delviery에 대한 select문이 발생합니다. 정리하면 처음에는 order에 대한 select문 그리고 실제 delevery 값을 사용할때 delivery에 대한 select문 해서 총 두번의 select문이 발생할꺼라고 예상을 했습니다.근데 실제 실행결과를 보니 총 세번의 select문이 발생했습니다. 실행결과에서 첫번째 select문과 두번째 select문이 출력된거는 이해가 되는데 마지막 select문은 왜 발생했는지 모르겠습니다.
-
해결됨김영한의 실전 자바 - 기본편
상속 관계가 있는 인스턴스 생성시 메모리 구조가 궁금합니다.
[질문 내용]부모 클래스 Parent와 해당 클래스를 상속 받는 Child 클래스가 있다면 Parent 클래스의 인스턴스를 생성하면 해당 클래스를 상속받는 모든 자식 클래스도 같이 생성되는 것인가요?일전에 배우기로는 인스턴스 생성시 해당 인스턴스의 부모와 자식이 모두 같은 참조값 내부에 생성된다고 배웠습니다.혹시 자식 인스턴스를 생성했을 때만 부모가 모두 생성된다와 같은 사항이 있는건지 아니면 말 그대로 상속 관계에 있는 모든 인스턴스가 생성 되는건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 실행함에 있어 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]application.ymlspring: datasource: url: jdbc:h2:tcp://localhost/~/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.SQL: debug # org.hibernate.type:trace org.hibernate.orm.jdbc.bind: tracebuild.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 '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' //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { } test { useJUnitPlatform() }MemberRepositoryTest.javapackage jpabook.jpashop; import jpabook.jpashop.Entity.Member; import jpabook.jpashop.Repository.MemberRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; 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.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(SpringExtension.class) @SpringBootTest class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional @Rollback(false) public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memberA"); //when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); //then assertThat(findMember.getId()).isEqualTo(member.getId()); assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); System.out.println("findMember == member: " + (findMember == member)); } }테스트 실행 시 No matching tests found in any candidate test task. Requested tests: Test pattern jpabook.jpashop.Repository.MemberRepositoryTest in task :test* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.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.8/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 1s4 actionable tasks: 1 executed, 3 up-to-date오류가 발생합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보드려요!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]교안 "8. 생산자 소비자 문제 1" - 12 page - 3번째 줄"임계 영역은 synchronized를 영역을 뜻한다."-> "임계 영역은 synchronized를 적용한 영역을 뜻한다.""적용한"이 빠져서 다음 업데이트 때 반영되면 좋을 것 같아 남깁니다.좋은 강의 항상 감사드립니다 영한님! :)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java.lang.NullPointerException: Cannot invoke "java.util.Optional.ifPresent(java.util.function.Consumer)" because the return value of "..."is null
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 회원테스트 기술 부분을 학습하고있는데 테스트케이스 오류가 났습니다 어떻게 해결해야할지 몰라 질문글을 적었습니다아래는 테스트 코드입니다import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberRepository memberRepository = new MemoryMemberRepository(); MemberService memberService = new MemberService(); //테스트는 과감하게 한글로 작성 가능 //테스트할땐 given,when,then 틀 사용 @Test void 회원가입() { //given Member member = new Member(); member.setName("hello"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); org.assertj.core.api.Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test void findMembers() { } @Test void findOne() { } }그리고 MemberService코드입니다package hello.hello_spring.service; import hello.hello_spring.domain.Member; import hello.hello_spring.repository.MemberRepository; import hello.hello_spring.repository.MemoryMemberRepository; import java.util.List; import java.util.Optional; public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); /*회원가입*/ public Long join(Member member){ validateDuplicateMember(member); //중복회원검증 memberRepository.save(member); return member.getId(); } private void validateDuplicateMember(Member member){ memberRepository.findByName(member.getName()) .ifPresent(m -> { throw new IllegalArgumentException("이미 존재하는 회원입니다"); }); } /*전체회원 조회*/ public List<Member> findMembers() { return memberRepository.findAll(); } public Optional<Member> findOne(Long memberId){ return memberRepository.findById(memberId); } }아래는 오류 메시지 입니다java.lang.NullPointerException: Cannot invoke "java.util.Optional.ifPresent(java.util.function.Consumer)" because the return value of "hello.hello_spring.repository.MemberRepository.findByName(String)" is nullat hello.hello_spring.service.MemberService.validateDuplicateMember(MemberService.java:22)at hello.hello_spring.service.MemberService.join(MemberService.java:15)at hello.hello_spring.service.MemberServiceTest.회원가입(MemberServiceTest.java:24)at java.base/java.lang.reflect.Method.invoke(Method.java:568)at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)Process finished with exit code -1 어떻게 해결하면 좋을까요?