안녕하세요! 최근 루키스님 강의를 통해 많은 도움 받고있는 수강생입니다. 학원 수강을 위한 졸업 유예 여부와 진로에 대해 질문 드리고자 합니다. (바쁘신 만큼 사족을 빼고 최대한 요약했습니다.) 부모님의 뜻에 따라 정보보안 특성화고 진학 -> 약간의 방황 후 전문대 진학 -> 충북대 소프트웨어학과 편입, 본인의 의지로 게임 클라이언트 개발자로 진로 변경 제 상황은 위와 같이 요약할 수 있으며, 현재 군필 24살 3학년 학생 입니다. 학점인정을 적게 받아서 아직 96학점 을 더 따야 하는 상태입니다. (최소 5학년 1학기) 어릴 때부터 자기주도적 학습 습관이 잡혀있지 않았다 보니 이제라도 정신 차려서 강제적으로 학습 환경을 조성해준다는 쥬신을 다녀보려고 합니다. 여기서 제 고민은 휴학/졸업 후 중 언제 다니는 것이 좋을까 하는 것입니다. 아버지는 이번에 바로 휴학을 하고 다녀보라고 하시는데, 중요한 부분이라 쉽게 결정하지 못하고 있습니다. 휴학을 한다면 학원에서 열심히 배우며 공부 습관과 개발 과정 및 지식을 습득하고, 복학 후에는 남은 학기를 마무리 하며 팀원을 모아 졸작으로 게임을 만들어 볼 수도 있겠죠. 졸업 후에 간다면 학원과정 수료 후에도 흐름을 끊지 않고 상용엔진 포폴을 만들어 바로 취업전선에 뛰어들 수 있을 것입니다. 각각 장단점이 있는데, 현재 기초 지식이 빈약한 상태라 이대로 바로 학원을 가게 되면 빠른 수업 속도와 빡빡한 커리큘럼을 따라가지 못하지 않을까 하는 걱정도 듭니다. 제가 더 빨리 진로를 정하고 미리미리 공부에 전념했다면 좋았겠지만... 선생님이 같은 상황이었다면 어떻게 하셨을 것 같은지 말씀해주시면 감사하겠습니다. 줄인다고 줄였는데도 길어졌네요. 긴 글 읽어주셔서 감사합니다.
안녕하세요. 강사님. 객체지향에서 시스템단에서 책임져야할 기능을 무엇을 기준으로 해서 세부적으로 하위 기능들을 추출하고 각 객체(역할)에 할당한다고 하셨는데 궁금한점이 분해된 책임을 적절한 객체에 할당하기 전에 객체의 엔티티 구조에 대한 정의가 어느정도 나와 있어야 되는거지요 ? 방법1 > 책임 분해 → 책임을 적절한 역할에 할당 → 책임 할당받은 객체 구현(해당 과정에서 필요한 정보들 셋팅) 방법2 > 책임 분해후 할당하기전에 이미 엔티티 구조에 대해서 어느정도 구조가 완성되어 있어 책임을 수행하는데 필요한 정보가 많은 객체에 책임 할당. 객체의 엔티티 구조가 어느 시점에 정의가 되는게 맞는걸까요 ?
Internal Server Error: /polls/survey/ Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ sqlite3.OperationalError: no such table: polls_survey The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in get response response = wrapped_callback(request, callback_args, *callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/minjiwon/Desktop/py/mysite/polls/views.py", line 98, in survey form.save () File "/opt/homebrew/lib/python3.11/site-packages/django/forms/models.py", line 542, in save self.instance.save () File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 814, in save self.save _base( File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 877, in save_base updated = self._save_table( ^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 1020, in save table results = self._do_insert( ^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 1061, in do insert return manager._insert( ^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/query.py", line 1805, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql cursor.execute(sql, params) File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 102, in execute return super().execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in execute with_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute with self.db.wrap_database_errors: File "/opt/homebrew/lib/python3.11/site-packages/django/db/utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ django.db.utils.OperationalError: no such table: polls_survey [05/Jul/2023 05:30:34] "POST /polls/survey/ HTTP/1.1" 500 141650 이렇게 뜨면서 안되고 어드민에서 survey 들어가는 것도 안되는데 makemigrations 다시 해봐도 똑같아요
패치 조인시 연관된 엔티티를 한번에 조회 하는 걸로 이해했습니다. 근데 LAZY 가 아닌 EAGER 로 연관관계를 했을 경우도 한번에 가져오는 걸로 아는데, String query = "SELECT t FROM Team t JOIN t.members "; List<Team> resultList = em.createQuery(query, Team.class) .getResultList(); for(Team team: resultList){ System.out.println("team : " + team.getName() + ", member size = : " +team.getMemberList().size()); } 위에 코드를 실행했을 경우, EAGER로 연관관계 설정을 해서 패치 조인과 같이 한번에 조회 될거라고 생각되었는데, 그렇치 안더라구요. 이유를 알 수 있을까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니오 [질문 내용] 안녕하세요. 트랜잭션을 시작한 후 CUD 쿼리를 사용하는 경우 자동으로 DB 락을 획득하게 되는걸까요? 혹시 원한다면 락을 걸지 않고 사용하는 설정도 있을 지 궁금합니다. 스프링을 사용할 때 @Lock 과 같은 애노테이션으로 락을 설정하는 것으로 기억하는데 설정을 하지 않아도 CUD 에서는 자동으로 락을 획득하게 되는걸까요?
Execution failed for task ':test'. > There were failing tests. See the report at: file:///C:/Users/kimta/Desktop/김영한%20강의자료/mvc2/message/build/reports/tests/test/index.html * 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.
안녕하세요 앨런(Allen)님! 수강 중 질문이 생겨 처음 인사드립니다. [섹션0.GCD - 1.GCD/Operation에 앞서] 강의까지 듣고 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지 질문 드립니다. - 2개 이상의 프로세스가 동시에 작업 하는 것이 ‘동시성 프로그래밍(Concurreny Programming)’ 이고 IOS에서 이러한 동시성 프로그래밍을 사용하기 위해 작업을 대기행렬(Queue)에 보내며, 대기행렬(Queue)은 직렬(Serial)과 동시(Concurrency)이라는 특성 을 가지고 있다고 이해했습니다. 이 과정에서 동기(Sync) 는 작업을 다른 스레드(Thread)에서 하도록 시킨 후, 기다렸다가 다음 일을 진행한다고 설명해 주셨는데 그렇다면 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지 확실하게 확인하고 넘어가면 좋을 것 같아 질문을 드리게 되었습니다. 추가로 대기행렬(Queue)의 특성 중 직렬(Serial) 은 작업을 분산시킨 *메인 스레드(Thread)가 있기 때문에 동시성 프로그래밍(Concurreny Programming)으로 볼 수 있다고 이해했는데 이해한 내용이 맞는지도 함께 답변 주시면 큰 도움이 될 것 같습니다. *강의 영상에서 말하는 Thread1을 작성한 것입니다. - 혹시 제가 잘못 이해한 부분이 있으면 함께 답변 남겨주시면 감사하겠습니다 :)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. findByName에서 자꾸 오류가 뜹니다 ㅠㅠ 근데 그게 정확한 이유가 뭔지 모르겠어요 Member.java package hwang.hwangspring.domain; public class Member { private Long id; //시스템이 정해줌 private String name; //고객이 회원가입할 때 적는 이름 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } MemoryMemberRepository.java package hwang.hwangspring.repository; import hwang.hwangspring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository{ private static Map<Long,Member> store = new HashMap<>(); private static long sequence= 0L; //0,1,2 키값을 생성 @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(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() { //실무에서 List 많이 씀 return new ArrayList<>(store.values()); } } package hwang.hwangspring.repository; import hwang.hwangspring.domain.Member; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { //굳이 public x, 따른데서 갖다쓸게 아니니까.. MemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Member(); //멤버 생성 member.setName("Hwang"); repository.save(member); Member result = repository.findById(member.getId()).get(); //System.out.println("result = "+(result==member)); //Assertions.assertEquals(member,result); //expected, actual assertThat(result).isEqualTo(member); } @Test public void findByName(){ Member member1 = new Member(); member1.setName("seo"); repository.save(member1); Member member2 = new Member(); member1.setName("hyun"); repository.save(member2); Member result= repository.findByName("seo").get(); assertThat(result).isEqualTo(member1); } }