11. 동시성 컬렉션 PDF 13 페이지 당연한 이야기지만 다음과 같이 나누어 작성해도 된다. SimpleList basicList = new BasicList(); SimpleList proxyList = new SyncProxyList(basicList); test(list) 강의 5:40 즈음 나오는 내용입니다. test() 에 proxyList 가 인자로 전달되어야하는데 pdf에는 test(list) 로 작성되어있네요. 감사합니다
안녕하세요 강사님, 좋아요 기능을 만드는 api를 반복하여 보고 있는데 궁금한 점이 생겨서 질문 드립니다. 좋아요 기능을 만들고 테스트중인데 좋아요가 중복처리 예를 들어, 10번 게시글에 15번의 사용자가 좋아요가 두 개를 눌러도 두 번 다 좋아요가 눌리는 상황인데 이에 대한 중복처리는 따로 해줘야 하는 것인가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 영한님 강의 듣다가 Result 클래스를 써야한다고 언급해주셨는데요, 해당 클래스 관련 질문 답변을 봤는데 https://www.inflearn.com/community/questions/442871/result-%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4?focusComment=168228 @GetMapping("/{boardId}") public ResponseEntity<BoardResponse> getBoard(@PathVariable("boardId") Long boardId) { return ResponseEntity.ok(boardService.getBoard(boardId)); } 이런식으로 ResponseEntity 감싸서 DTO를 반환하는것과 Result 클래스가 같은 맥락으로 응답을 추상화한다고 생각하면 될까요? 감사합니다 :)
💡 질문하기 전에 먼저 확인해보세요! 답변을 기다리는 동안, 아래 항목들을 먼저 확인해보시면 문제가 해결될 수도 있어요. 강의 내용 다시 보기: 혹시 놓친 부분이 없는지 해당 챕터의 강의를 한 번 더 돌려보셨나요? 오타 및 들여쓰기 확인: 파이썬은 특히 들여쓰기에 민감해요. 코드에 오타나 잘못된 들여쓰기는 없는지 꼼꼼히 확인해주세요. 에러 메시지 검색: 빨간색 에러 메시지가 떴다면, 메시지 전체를 복사해서 구글에 그대로 붙여넣기 해보세요. 전 세계 개발자들이 비슷한 문제를 겪고 해결책을 공유해두었을 확률이 높습니다. Q&A 게시판 검색: 혹시 다른 분이 먼저 비슷한 질문을 올렸는지 게시판을 한번 살펴보는 것도 좋은 방법이에요. 해당 강의 화면에서 코드를 보고 설명하시는 것 같은데 화면이 계속 인프런 강의소개 페이지인데 제가 맞게 보고 있는걸까요?
안녕하세요. Airflow 3.0 에서 EmailOperator 사용시 conn_id 를 세팅하지 않으면 smtp_default 를 기본적으로 사용하고 있어보입니다. smtp_default 세팅은 config 파일에 보니 email_conn_id(AIRFLOW__EMAIL__EMAIL__CONN__ID) 에 세팅되어 있어 EmailOperator 와 fail났을때 smtp_default를 세팅해놓으면 동시에 사용 가능한것은 아닐까요?
RequestBody를 읽어올 때, Content-Length의 값을 파싱하고 그 크기만큼 read()에 배열 형태로 전달해서 버퍼형태로 한번에 받아오게끔 작성하셨습니다. 여기서 궁금한 점은, Content-Length는 byte 단위로 측정이 될텐데, char[]를 그대로 사용하면 UTF-8로 디코딩이 자동으로 되는 이유가 궁금합니다..! byte[] 단위로 읽어온 다음, Charset을 지정해서 디코딩해야하는거 아닌가욤? 감사합니다!
선생님 안녕하세요. 최대 혹은 최소값으로 ans를 int(1e6, 1e7, 1e8) 등 다양하게 설정하시는데 혹시 기준이 있을까요? 문제를 풀다 보면 탐색 전에 미리 최소값이나 최대값을 세팅해야 하는 경우가 있는데, 그 세팅의 베스트 프랙티스나 혹은 float(int) 같이 최대/최소값을 따로 정하시는 로직이 후반부에 나오는지 궁금합니다.
영한님이 단일 스레드일 때 테스트 하셨는데요. 멀티 스레드일 때 테스트 결과도 궁금하신 분들이 있을 것 같아 공유 드립니다 :) 빠른 테스트를 위해서 sleep 은 사용하지 않았습니다. public class IncrementPerformanceMain { public static final int COUNT = 1_000_000; public static void main(String[] args) throws InterruptedException { test(new BasicInteger()); test(new VolatileInteger()); test(new SyncInteger()); test(new MyAtomicInteger()); } private static void test(IncrementInteger incrementInteger) throws InterruptedException { long startMs = System.currentTimeMillis(); Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i < COUNT; i++) { incrementInteger.increment(); } } }; ArrayList<Thread> threads = new ArrayList<>(); for (int i = 0; i < 100; i++) { Thread thread = new Thread(runnable); threads.add(thread); thread.start(); } for (Thread thread : threads) { thread.join(); // 모든 스레드가 종료 될 때 까지 기다림 } long endMs = System.currentTimeMillis(); System.out.println( incrementInteger.getClass().getSimpleName() + ": ms=" + (endMs - startMs) + ", result=" + incrementInteger.get()); } } 결과 BasicInteger: ms=32, result=88652038 VolatileInteger: ms=3653, result=17721836 SyncInteger: ms=4882, result=100000000 MyAtomicInteger: ms=6953, result=100000000 MyAtomicInteger 보다 SyncInteger 가 성능이 좋은 이유는 CAS 는 기본적으로 락보다는 빠르지만, 경쟁이 심하면 CAS 실패로 재시도를 반복 하기 때문에 성능이 락보다 안나오고 있는 것 으로 보이네요. 추가로 BasicInteger 에 비해서 VolatileInteger 의 손실율이 큰 이유는 모두가 동시에 메인 메모리에 접근하게 되면서 발생한 문제로 보이네요. 비유적으로 설명하면 BasicInteger : 각자 수첩(캐시)에 메모하고 나중에 합침 → 충돌 적고, 결과는 꽤 괜찮음 (운이 좋으면) VolatileInteger : 100명이 하나의 화이트보드(메인 메모리)에 동시에 적으려는 상황 → 끊임없는 덮어쓰기, 충돌 많음 → 결과는 엉망 감사합니다. ^0^
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. @Override public boolean equals(Object object) { if (this == object) return true; // 강의에서 생성자를 통해 생성된 코드 if (object == null || getClass() != object.getClass()) return false; Member member = (Member) object; return Objects.equals(id, member.id); } @Override public boolean equals(Object object) { // 질문자의 생성자를 통해 생성된 코드 if (object == null || getClass() != object.getClass()) return false; Member member = (Member) object; return Objects.equals(id, member.id); } 위와 같이 코드가 다르게 생성 되는데 차이가 있는지 , 혹은 설정이 잘못된건지 궁금합니다. OS 는 윈도우 ,sdk 는 ms-21 사용중입니다.
토비님의 의견에 동의합니다. 화면에서 필드 하나 필요하다는 수정사항을 처리하기 위해 Presentation 레이어 이외의 클래스들을 수정하고 싶진 않아요. 그럼에도 불구하고 현업에선 정말 수많은 이유를 들어서 DTO로 반환하는 걸 유지하려고 합니다. 별도의 관심사를 끌어안게 되면서 애플리케이션 레이어의 테스트 코드 작성이 까다로워지고, 그로 인해 안정성이 하나씩 무너지고 균열이 생기기 시작하는 지점이 이곳이지 않을까 싶어요. 어찌보면 강의를 들을까 고민하던 때에 가장 매력있게 보였던 챕터였고, 무언가 해답을 얻을 수 있을까 했지만 여전히 뭔가 용기가 생기진 않는 것 같습니다. 물론 그것이 토비님 탓은 아니죠. 훌륭한 가르침이지만, 단지 이것을 제 현장에 전파할 때 발생할 어려움에 벌써 머리가 아파지는 것.. 그 뿐입니다. 질문은 아니고 그저 넋두리였습니다. 나머지 강의 마저 잘 들어보겠습니다. 감사합니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요, 영한님! JPA 활용2 강의 감사한 마음으로 잘 보고 있습니다. @PostConstruct는 빈이 생성되고 의존성 주입이 모두 끝난 직후에 자동으로 실행되는 메서드로 프록시 생성 이전에 실행되기 때문에 @Transactional과 함께 사용할 수 없어, init() 메서드에서 두 애노테이션(@PostConstruct, @Transactional)을 함께 작성할 수 없는 걸까요? GPT 답변을 참고한 후 질문 드립니다!
강의에서는 스트링풀이 힙에 있다고 했는데 스프링 풀은 메타영역으로 메소드 영역에 있고 리터럴에 생성되는 경우에 중복되지 않게 값이 있는지 찾아보고 참조값을 동일하게 가져가고 new String("hello") 이렇게 선언될때만 힙에 새롭게 저장되는거 아닌가요? 스트링풀이 힙에 있다고해서 헷갈리기 시작해서 질문드립니다. ( Java 7 기준 설명이라서 그런걸까요?) 감사합니다. 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
POST API 첫번째 강의에서 main.py의 52번 줄에 request를 dict() 형식으로 꼭 맞춰 주어야하나요?? 출력은 request >> id=4 contents='aaa' is_done=True request.dict() >> {'id': 4, 'contents': 'aaaa', 'is_done': True} 이렇게 되는데, 그냥 request 만 써도 swagger UI에서 보았을 땐 똑같이 dict 형식으로 들어오더라구요. 궁금해서 문의드립니다.
맹목적인 파라미터의 숫자가 아닌 보통 함축적 정보를 전달하기 위해 DTO, 즉 파라미터 오브젝트를 사용해서 전달하는 방식은 워낙 간결한 방식이라 저도 선호도가 높긴 합니다. 하지만 엔티티의 영역에서 DTO와 유사한 레코드 형식의 매개변수를 전달 받는 방식은 어느 정도 엔티티의 순수성이 침해 받는 방식이 아닌가 생각이 들어서요. 실제로 작성하신 코드를 봤을 때 그런 순수성 집착 보다 휴먼 에러를 사전에 방지하는 접근 방식이라 매우 적절한 트레이드 오프라고 생각이 들기도 합니다. 이 부분에 대해서 개인적인 궁금증이 생겨서 질의 드립니다. 아직 강의를 다 본 상황이 아니라서 이런 질문을 하는 게 맞는지 작성하는 지금 이 순간 조차 고민이 되지만, 실제로 제가 생각하던 방식과의 거리감이 느껴져서 질문을 남겨봅니다.