묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
딕셔너리 new 로 생성하는 것에 대한 에러?
안녕하세요유니티짱 폴더를 강의와 같이 정리하다 보니, 위 경고 메시지가 떴습니다. 그런데 해당 위치는 Dictionary 등 유니티 모노비헤비어 에서 상속받은 게 아닌데... 왜 뜨는 걸까요? 그것도 유니티짱 경로 정리 하다가 그런 경고가 갑자기 뜨는 이유를 알 수가 없습니다.
-
미해결김영한의 실전 자바 - 중급 1편
Period, Duration
안녕하세요 강의 듣던중 궁금한게 생겼는데Period, Duration을 사용하지 않고LocalDateTime으로만 대체 가능한거 아닌가요 ?? 특별히 Period, Duration 객체를 사용하는 이유가 있을까요 ? 대체가 가능하다면용도가 달라서 만든 객체라고 생각하면 될까요 ??
-
해결됨장래쌤과 함께하는 쉽고 재미있는 SQL 이야기
ELT 함수와 FIELD함수 질문입니다.
함수 개념과 기능이 상이하여 질문드립니다.ELT()함수는 나열된 값 중에서 지정한 위치의 값을 반환하는 함수이고,FIELD()함수는 나열된 값 중에서 지정한 값이 있는 위치를 반환하는 함수라고 배웠습니다. 그런데 ELT()함수 기능 자체에는 지정한 위치의 값을 반환하는 것이지, 값을 변경하는 함수가 아닌데ELT(NTILE(3) OVER(ORDER BY salary DESC), '상', '중', '하') AS grp해당 코드를 통해 1은 '상', 2는 '중', 3은 '하'로 변경됩니다.(NTILE(3) OVER(ORDER BY salary DESC), '상', '중', '하'로 인해 이름이 바뀌는 것이라고 해도, ELT자체는 특정 위치의 값을 호출하는 함수인데, 지정 위치 숫자도 없고, 어떻게 이런 결과가 가능한지 이해가 안 갑니다!) 또한 FIELD()함수 기능 자체에는 위치를 반환하는 것이지, 호출 순서를 나열하는 것이 아닌데,ORDER BY FIELD(dept_id, 'MKT', 'HRD', 'SYS')해당 코드를 통해 'MKT', 'HRD', 'SYS' 순서로 데이터가 호출됩니다.(ORDER BY에 의해 순서가 정렬되는 것이라고 해도, FIELD자체는 위치를 호출하는 함수인데, 어떻게 이런 결과가 가능한지 이해가 안 갑니다!) ELT()와 FIELD()함수 자체는 각각 위치의 값을 반환하는 기능, 위치를 반환하는 기능이 있으나,ELT()는 값을 변경할 수 있고,FIELD는 호출 순서를 지정할 수 있는 기능이 있다고 추가적으로 이해하면 되는 걸까요??
-
미해결스프링 핵심 원리 - 기본편
setter 주입 시의 생성자
클래스에 생성자가 단 1개 존재하는 경우 @Autowired를 생략할 수 있다고 하셨는데, 이는 생성자 주입을 하는 경우에만 해당하는걸까요? setter 주입을 하기 위해 OrderServiceImpl에 setter를 정의하고 각 setter에 @Autowired를 붙였다면, 이때는 생성자 주입이 아닌 setter 주입이 이뤄지는 걸까요? 제가 추가적으로 OrderServiceImpl의 생성자에 출력문을 두었더니 memberRepository에 스프링 컨테이너에 존재하는 MemoryMemberRepository 객체의 주소값이 들어왔습니다... 생성자 주입도 이뤄지고 setter 주입도 이뤄지는 건가요...?public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { System.out.println("OrderServiceImpl.OrderServiceImpl"); System.out.println("memberRepository = " + memberRepository); this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; }
-
미해결실전! 스프링 데이터 JPA
낙관적 락에 대해 질문이 있습니다.
Hibernate는 @Version을 사용하고, Lock 옵션을 @Lock(LockModeType.OPTIMISTIC)을 사용할 경우에 NONE 모드와 다르게 엔티티를 수정하지 않고 단순히 조회만 해도 버전을 확인한다고 강사님 JPA 책에 작성되어있습니다. 실제 코드로 구현해보니 버전만 확인하는거 같더라구요그 사이에 다른 트랜잭션이 해당 엔티티를 수정하여 버전이 변경되어도 ObjectOptimisticLockingFailureException 예외가 발생하지 않습니다. 간단하게 로직을 설명드리면 트랜잭션 A가 옵티미스틱 락 모드로 회원을 조회합니다. version = 0트랜잭션 A를 5초 대기합니다.트랜잭션 B가 회원을 수정하여 버전이 변경됩니다. version = 1트랜잭션 B가 종료됩니다.5초가 지나 트랜잭션 A가 종료됩니다.트랜잭션 A가 종료될 때 옵티미스틱 락 모드라서 마지막에 버전을 확인합니다.select version as version_ from member where id=?그런데 트랜잭션 A가 종료될때에 회원 버전이 다르지만 예외가 발생하지 않습니다. 이러면 OPTIMISTIC의 용도가 트랜잭션을 커밋할 때 버전 정보를 조회해서 현재 엔티티의 버전과 같은지 검증한다. 만약 같지 않으면 예외가 발생한다고 작성되어있는데 예외가 발생하지 않는다면 강사님께서 설명해주신 조회한 엔티티는 트랜잭션이 끝날 때까지 다른 트랜잭션에 의해 변경되지 않아야한다. 조회 시점부터 트랜잭션이 끝날때까지 조회한 엔티티가 변경되지 않음을 보장한다.이 말의 다른 의미가 어떤건지 궁금합니다 !아니면 제가 테스트를 잘못하고 있는 걸까요..? 아래는 로직에 대한 간단한 코드입니다.도메인package org.example.stock_rt_1.domain; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; @Entity @Getter @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id; private long personId; private int age; @Version private Long version; public Member(long personId, int age) { this.personId = personId; this.age = age; } public void addAge() { ++this.age; } }리포지토리package org.example.stock_rt_1.repository; import jakarta.persistence.LockModeType; import org.example.stock_rt_1.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Lock; import java.util.Optional; public interface MemberRepository extends JpaRepository<Member, Long> { @Lock(LockModeType.OPTIMISTIC) Optional<Member> findByPersonId(Long id); }서비스package org.example.stock_rt_1.service; import lombok.RequiredArgsConstructor; import org.example.stock_rt_1.domain.Member; import org.example.stock_rt_1.repository.MemberRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @Service @RequiredArgsConstructor public class MemberService { public final MemberRepository memberRepository; @Transactional public void addAge(long personId) { sleep(500); //findMember가 먼저 실행되야하기 때문에 넣었습니다. Member member = memberRepository.findByPersonId(personId).orElseThrow(); member.addAge(); } @Transactional public void findMember(long personId) { memberRepository.findByPersonId(personId); sleep(5000); } private void sleep(long mills) { try { Thread.sleep(mills); } catch (InterruptedException e) { System.out.println("e = " + e.getMessage()); } } }테스트코드package org.example.stock_rt_1.service; import org.example.stock_rt_1.domain.Member; import org.example.stock_rt_1.repository.MemberRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class MemberServiceTest { @Autowired private MemberService memberService; @Autowired private MemberRepository memberRepository; @Test @DisplayName("회원 정보를 조회중 다른 트랜잭션에서 정보를 변경했다.") void addAge() throws InterruptedException { // given int personId = 5555; memberRepository.save(new Member(personId,15)); // when Thread selectThread = new Thread(() -> memberService.findMember(personId),"트랜잭션-A"); selectThread.start(); Thread updateThread = new Thread(() -> memberService.addAge(personId),"트랜잭션-B"); updateThread.start(); selectThread.join(); updateThread.join(); } }로그[트랜잭션-A] : select m1_0.id,m1_0.age,m1_0.person_id,m1_0.version from member m1_0 where m1_0.person_id=? Hibernate: select m1_0.id,m1_0.age,m1_0.person_id,m1_0.version from member m1_0 where m1_0.person_id=? [트랜잭션-B] : select m1_0.id,m1_0.age,m1_0.person_id,m1_0.version from member m1_0 where m1_0.person_id=? Hibernate: select m1_0.id,m1_0.age,m1_0.person_id,m1_0.version from member m1_0 where m1_0.person_id=? [트랜잭션-B] : update member set age=?,person_id=?,version=? where id=? and version=? [트랜잭션-B] : select version as version_ from member where id=? [트랜잭션-A] : select version as version_ from member where id=?
-
해결됨개발자를 위한 쉬운 도커
leafy 사이트 로그인 에러 문의
안녕하세요. leafy 사이트 로딩까지 하였고 DB 백엔드, 프론트엔드까지 도커실행 완료했어요.. 근데 사이트 로그인이 안되네요 ㅋㅋㅋ id : john123@qmail.compw: password123 이걸 아무리 여러번 쳐도 똑같아요.. 1. 궁금한게 postgre DB를 도커에서 다운받으면 초기 데이터가 들어가있는걸까요?? 이거 로그인이 안되서 postgre DB를 살펴보고 싶은데 docker 실행중인 DB 데이터 확인할수 있는 방법 있을까요?
-
해결됨[2025 리뉴얼] 스스로 구축하는 AWS 클라우드 인프라 - 기본편
private ec2 c1에 pem 키
ssh를 통해 public-ec2-a1 인스턴스에 접근한 뒤에, private-ec2-a1에 접근할때는 pem키가 필요하기 때문에 해당 키 내용을 복사해서 파일을 만든뒤 접근하셨는데요, public-ec2-c1 인스턴스에서 private-ec2-c1 인스턴스에 접근할때는 pem키를 또 만들지 않고도 바로 접근이 가능했는데 이유가 뭔지 궁금합니다! efs로 각 public ec2가 공유되어서 그런건가요?
-
미해결리눅스 입문 - 개념으로 탄탄히!!
sudo apt install hello 오류
관리자 권한에 대한 영상에 나오는 sudo apt install hello를 했는데 다음과 같은 오류가 발생하였는데 해결이 안됩니다;;
-
미해결스프링 핵심 원리 - 기본편
수동 빈 등록 vs 수동 빈 등록
수동 빈 등록 vs 수동 빈 등록에 대해 다루시지 않았다는 점이 궁금해서 질문드립니다. 제가 생각한 이유는 다음과 같은데, 실무 경험이 없어서 오류가 있을 것 같은데 오류 알려주시면 감사하겠습니다. 보통 애플리케이션의 설정 클래스는 1개 만들고, 이 클래스 내에서 여러 메서드(빈 등록 메서드)를 정의합니다. 중복되는 이름을 가진 메서드(= 빈의 이름이 중복됨)를 정의하면 자바 언어 차원에서 메서드 중복 정의되었다고 컴파일 오류로 알려주기 때문에 빈 이름(= 메서드 이름)을 중복 정의할 일이 없기 때문입니다.그런데, 생각해보면 @Bean도 name 옵션을 통해 빈 이름을 변경할 수 있고, 그렇다면 수동 빈 등록 시에도 빈 이름 중복 문제가 발생하는데 수동 빈 등록 vs 수동 빈 등록에 대해 다루시지 않는 이유가 무엇인가요? 혹시 자동 빈 등록보다 수동 빈 등록을 사용할 일이 적어서 그러한 것인가요?
-
미해결Pandas 팬더스 데이터분석 기초 실습
applymap이 더 이상 권장되지 않는다고 하는데요
map은 시리즈에 적용되므로 모든 칼럼에 적용이 어려운데applymap함수는 apply와 람다식으로 대체하나요??
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
중복 검사 (메소드 활용)
for문으로 구현하고나서 문득 메소드로 중복검사를 구현할 수 있을 거 같은 느낌이 들었습니다.전체 숫자에서 하나의 값을 저장하고 모든 숫자를 한번씩 검색 하면은 find(map()) 또는 map(find()) 방법으로 구현 할 수 있을까요?아님 find 하나만으로도 구현 할 수 있을까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
WebServerCustomize의 어노테이션을 주석처리 하는 이유??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Component를 주석처리하면 스프링 빈에 등록이 안되어 있으니 개발자가 예외처리를 안하고 발생한 예외를 스프링이 자동으로 처리하게 하도록 위함인건가요? 스프링은 /error의 경로로 자동 등록되는것은 이해하였는데 그 하위 html파일에 어떻게 매핑이 되는건지 잘 모르겠습니다. 그 이전에는 직접 경로를 설정해 주었는데 스프링이 자동으로 하는 경우에는 에러코드가 이름으로 설정된 html파일을 자동으로 보여주는 건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2 - P 질문
http://boj.kr/ce16c6cbdf114d2dab3f3a8f44c9c285안녕하세요 강사님2-P 문제를 강사님의 풀이와는 달리 for 중첩문이랑 처음 입력한 mp배열을 복사해서 풀이할 temp배열을 만들어서 풀어봤는데 몇몇 예제에서 오답이 나와서 질문 드려요ㅠㅡ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
10나누기와 0.1 곱하기의 차이 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. round가 round half even 방식이라 짝수값에서 내림을 하는 것은 이해 했고 소수 첫째 자리에서 반올림 하고 싶으면 0.5를 더하고 int 로 감싸서 몫을 구하는 것을 이해했습니다. 소수 두 번째 자리도 시도해 보는 도중 정수에 10을 나누는 것과 0.1을 곱하는 것의 결과가 다르다는 것을 알게 되었습니다.혹시 다른 이유가 무엇인지 알 수 있을까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
\ <-이 작대기 작성 키는 무엇인가요??
\ <-이 작대기 작성 키는 무엇인가요??
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
db 시퀄라이즈 관계 설정 및 백엔드 요청 질문입니다!
안녕하세요 제로초님, 강의 잘듣고잇습니다!!! db시퀄라이즈 관계 설정? 질문좀 드리려고요. 강의듣고 블로그를 만들어보려고 백/프론트 구상하고 있는데요, db table설정?을 어떻게 해야할지 헷갈려서요. 메인 페이지는 전체 post를 카테고리(메뉴)별로 나눠서 보여줍니다.메뉴[ study / TIL / portfolio ]를 클릭하면 해당 categories로 저장한 게시글을 보여줍니다 (노란화살표)포스트 작성할 때는 하나의 categories를 선택합니다. 각 게시글은 하나의 카테고리만 가집니다! 헷갈리는 부분은메뉴탭을 눌러서 study / TIL 로 이동했을 때, 전체 post를 가져오는 게 아니라 해당 categories의 post만 가져오고 싶은데, db를 활용해야 하는건지, 백엔드에서 필터링 과정을 해야 하는건지, 헷갈립니다이때 categories를 관계형 테이블?로 만들어서 해당 카테고리로 post를 가져올 수 있나요????백엔드가 전체 db에서 post를 findAll로 가져와, 카테고리로 필터링해서 프론트로 넘겨줘야 하나요?서버에서 전체 post를 받아서 프론트에서 필터링해서 각 컴포넌트에서 사용해야 하나요?? 흠. 뭔가 여러 방법이 떠오르긴 하는데 아직 시도해보지는 않았고 ㅎㅎㅎ 효율적인 방법이 뭔지 알고싶어요!! 제로초님이라면 어떤 방법을 사용하시나요?
-
해결됨넓고 얕게 외워서 컴공 전공자 되기
shell에 관련하여 질문드립니다.
복습 중에 궁금한 사항이 있어서 질문드립니다. 강사님께서 '컴퓨터라는 세상에 나라는 존재는 프로세스 형태로 존재한다.'라고 하셨고 대표적인 예가 shell이라고 하셨는데요. 그러면 이 shell이 0번 프로세스가 되는건가요? 항상 질 좋은 강의를 만들어주셔서 감사드립니다.
-
해결됨김영한의 실전 자바 - 기본편
다형성 문제 풀이2번 - 한번 봐주시면 감사하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 저한테는 아직도 짜증이 나고 신경질 나게 하는, 다형성 문제 풀이 2번을 드디어 풀었는데.. 역시 코드 가 좋은 코드인지 안 좋은 코드인지 확인을 받고 싶은게 사람의 심리인가 봅니다. 혹 여기서 개선 할점 이나 나쁜게 보인다면 지적해 주시기 바랍니다.답변 부탁 드립니다.(해답 풀이는 안보고 Car를 좀 참고하기는 했습니다., 그리고 고수 분들에게는 꾸질수도 있으니 좀 양해 바랍니다.)-추가 그리고 80퍼 이해하면 프로그랭밍 적성이 맞는다고 하였는데 영한님 관점에서 80%입니까? 아니면 저희들이 이해하고 있는 관점에서 80%인가요...??
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
InsertPicture()메서드 질문
hwp.InsertPicture(경로, sizeoption)에서 경로를 png 파일은 안되나요? jpg만 인식이 되는거 같아서 질문남깁니다
-
해결됨[백문이불여일타] 데이터 분석을 위한 중급 SQL
피봇 테이블 질문이있습니다
SQL 쿼리의 데이터 처리 순서가 쿼리문 순서대로 진행된다고 이해하고 있었는데 GROUP BY 가 등장하면서 너무 헷갈리네요..(GROUP BY 를 하지 않은 SQL 쿼리문)SELECT id , SUM(CASE WHEN month = 'Jan' THEN revenue ELSE NULL END) as Jan_Revenue , SUM(CASE WHEN month = 'Feb' THEN revenue ELSE NULL END) as Feb_Revenue , ... FROM department; 위 SQL 을 실행해보면 row 가 하나밖에 없는 출력이 나오더라구요 (ID 가 1인)| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | Apr_Revenue | May_Revenue | Jun_Revenue | Jul_Revenue | Aug_Revenue | Sep_Revenue | Oct_Revenue | Nov_Revenue | Dec_Revenue | | -- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | | 1 | 17000 | 17000 | 6000 | null | null | null | null | null | null | null | null | null | 그런데 데이터 처리 순서상 해당 출력문으로 가지고 GROUP BY id 를 했을때 어떻게 id 가 1, 2, 3 모두 출력될 수 있는지 궁금합니다