강의 항상 잘 듣고 있습니다^^!! 수업과는 조금? 상관이 없는 질문 일수도 있는데요. 개인적으로 복습해보려고 아마존 S2에 Mysql 테이블 생성해서 데이터 넣고 제가 jpa, jpa-data 등 이용해서 자료 한번 조회하는 간단한 프로젝트를 해보고 있습니다. 그런데 ㅠㅠ DB에 데이터는 정상적으로 들어가는데 JPA가 쏘는 쿼리가 영 이상한지 계속 오류가 뜨네요. 무엇이 잘못된 거일까요? 작동시키려는 쿼리? 메소드는 단순합니다. 전체 정보 불러오기 입니다. @GetMapping("/findall") public String findAll() { String result = ""; for (Site site : siteRepository.findAll()) { result += site.toString() + "<br/>"; } return result; } application.yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://54.xxx1xx.x3/shark1 username: password: jpa: hibernate: ddl-auto: none show-sql: true database: mysql data: jpa: repositories: enabled: true siteRepository.java @Transactional(readOnly = true) public interface SiteRepository extends JpaRepository<Site, Long> { List<Site> findByArea1(String area1); } Site.java @Entity @Getter @Setter @Table(name = "site") public class Site { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long site_id; private String name; private String location; private String area1; private String area2; private String info; } 소스는 이러하구요 쿼리가 나갈때 findall() 호출하면 Hibernate: select site0_.site_id as site_id1_0_, site0_.area1 as area2_0_, site0_.area2 as area3_0_, site0_.info as info4_0_, site0_.location as location5_0_, site0_.name as name6_0_ from site site0_ 이런식으로 나갑니다 ㅠㅠㅠ DB 칼럼도 도메인이랑 모두 맞춰놨는데요 ㅠㅠ 제가 뭔가 JPA에 대해 설정을 잘못한게 있을까요? 도움 꼭 부탁드립니다. ㅠㅠ
안녕하세요 영한센세!! 강의를 듣다가 @Repository 애노테이션에 대해서 궁금한 점이 생겨서 질문을 남깁니다!! "스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다." 제가 이해한 바로는 스프링 데이터 접근 계층 : 코드Level 의 예외 데이터 계층의 예외 : DB (SELECT, INSERT, DELETE) Level 의 예외 라고 이해했습니다... 그렇다면 만약 DB Level 의 예외가 발생하면 코드Level 의 예외로 반환해준다. 로 결론이 났는데 이해한 내용이 맞는지 궁금합니다🤔 ps. 간략한 예시가 있을까용🙏🏻?
void Transpose(char* str) { while (*str) { if (islower(*str)) *str = toupper(*str); else if (isupper(*str)) *str = tolower(str); str++; } 1. 트랜스포즈함수에서 while문 조건식에 (*str)이 의미가 뭘까요?? *str에 값이 있다면 while문으로 들어가서 실행해라는 의미인가요?
open containing folder를 이용하여 myheaders파일을 새로 만들고 add.h파일을 옮기고 난 후 우측 explorer창에서 헤더 파일을 우클릭 하고 open을 눌렀는데 계속 실행이 안 되었습니다. include 하여 빌드는 되긴 하지만 이렇게 실행이 계속 안되는게 보편적인 문제인 건지 아니면 제 컴퓨터에 한해서 실행이 안 되는 건지 궁금하여 질문 남깁니다!!
다름이 아니라 영상의 27분 50초 쯤 SendBuffer에 대해서 C++일경우에 레퍼런스 카운트를 이용해서 0이라면 풀에 반환한다고 말씀하셨는데요. C#에서도 아래처럼 1) 가능한 부분이 아닌가 싶어서 궁금해서 질문드려봅니다 TLS 환경에 일정량의 SendBuffer Pool을 만들어 놓고 TLS환경에는 싱글스레드 처럼 하나의 스레드만 접근이 가능하므로 SendBuffer.Open시에 SendBuffer에 FreeSize가 reserveSize보다 크면 Pool에 반납을 하고 새롭게 미리 할당된 메모리를 가져오고 기존 메모리를 초기화해서 다시 풀에 넣는방식이라면 가능하지 않을까 싶은데 어떻게 생각하시는지 궁금합니다 추가질문 입니다. 2) 아래와 같은 이유로 SendBuffer를 새로 할당한 것인가요? C++의 레퍼런스 카운트를 이야기한 부분이 혹시Send시에 SocketAsyncEventArgs의 BuffList에 ArraySegment값들이 들어가고(원본의 참조형태로 들고 있기 떄문에) 그걸 Socket.SendAsync에서 호출하게 되는데 커널단에서 실제 Send 처리 이후의 메모리의 레퍼런스 카운트 시점을 알아야 정확히 풀로 반환할 수 있기 때문인건가요? 위와 같은 문제라서 SendBuffer는 새로 할당하는 방법을 선택하신건지도 궁금합니다 3) C#에선 풀은 세션 별로 버퍼 풀방법 뿐인건가요? 결국 레퍼런스 카운트 때문이라도 C#에선Pool을 활용하려면 결국 세션 단위로 버퍼풀을 만들어서 사용하는 방법뿐일까요?
auth.js 에서 req.cookies를 찍어보면 undefined로 뜹니다. 같은문제로 다른 분들이 질문하신 것들을 참고해서 제 코드를 확인해봤는데 오타문제나 cookieParser를 빠뜨려서 생긴 문제는 아니었고요. 현재 저는 cors를 back에서 직접 해주고 있는데 어떻게 해결해야 하나요? let auth = (req, res, next) => { // 인증처리 하는 곳 // 클라이언트 쿠키에서 토큰을 가져온다 let token = req.cookies.x_auth; console.log('쿠키', req.cookies.x_auth); // 토큰을 복호화 한 후 유저를 찾는다. User.findByToken(token, (err, user)=>{ if(err) throw err; // 유저가 없으면 인증 No if(!user) return res.json({isAuth:false, error: true}); // 유저가 있으면 인증 Okay req.token = token; req.user = user; next(); }) }
그런데 아래와 같이 문구가 뜹니다. useEffect에서 history를 사용했을 때 console창에 아래와 같은 문구가 뜨는데 해결방법이 있을까요?? console.log창에서 아래와같이 문구가뜹니다. Line 26:6: React Hook useEffect has a missing dependency: 'history'. Either include it or remove the dependency array react-hooks/exhaustive-deps useEffect (() => { firebase . auth (). onAuthStateChanged ( user => { if ( user ) { history . push ( "/" ); } else { history . push ( "/login" ); } }) }, [])
코드에서 에밋 단축키 설정할 때에 이미 다른 단축키 설정이 되어있다고 하면 못하는건가요? 제가 설치한 vscode에서는 ctrl + d 가 사용중이더라고요. 아직 이게 뭔지 모르겠지만;; ctrl+d로 고치지 않고 초기값 그대로 사용해도 수업에는 지장이 없는지요? 넘넘 기초적인 질문드려서 죄송합니다.
안녕하세요! 항상 좋은 강의 잘 듣고 있습니다. 감사합니다. 현재 챕터4 끝까지 수강하고 다시 복습하고 있었는데, 자꾸 위와 같은 에러가 발생합니다. 이미 저랑 같은 질문을 했던 분들이 많이 계셔서 밑에 달린 제로초님 답변 따라 PostCard부터 쭉 확인해봤는데도 어떤 문제인지 찾지 못했습니다.. 리덕스데브툴로 확인해보니, ADD_POST_REQUEST ADD_POST_SUCCESS ADD_POST_TO_ME 까지 실행됐다가 에러가 발생합니다. // PostCard.js < Card.Meta avatar = { < Avatar > { post . User . nickname [ 0 ] } </ Avatar > } title = { post . User . nickname } description = { < PostCardContent postData = { post . content } /> } /> // reducers/post.js const dummyPost = ( data ) => ({ id : data . id , content : data . content , User : { id : 1 , nickname : '제로초' , }, Images : [], Comments : [], }); // reducers/user.js case ADD_POST_TO_ME : draft . me . Posts . unshift ({ id : action . data }); break ; // sagas/post.js function* addPost ( action ) { try { // const result = yield call(addPostAPI, action.data); yield delay ( 1000 ); const id = shortId . generate (); yield put ({ type : ADD_POST_SUCCESS , data : { id , content : action . data , }, }); yield put ({ type : ADD_POST_TO_ME , data : id , }); const onSubmitForm = useCallback (() => { dispatch ({ type : ADD_POST_REQUEST , data : { text , }, }); }, []); PostForm의 data: { text } 부분을 그냥 data: text, 로 입력해봤는데 그때부터는 위와 같은 TypeError는 발생하지 않았지만, 글이 빈칸으로 포스팅되고 리덕스로 확인해보니 content 가 빈칸으로만 출력되었습니다..
안녕하세요. 강의 마지막부분에 설명해주신 로그아웃 기능 관련 문의를 드리려합니다. 우측 상단에 있는 로그아웃 버튼을 클릭하게 되면 클릭하자마자 쿠키에 저장된 User 관련 정보가 사라짐으로써 기본 페이지가 로딩되지 않고 로그인 페이지로 리다이렉션이 되어야 하는 것이 정상 시나리오인것 같은데요. 로그아웃 버튼을 클릭하면 리다이렉션이 이루어지지 않은 채 그대로 멈춰있네요. 그 상태에서 새로고침을 하게 되면 로그인 페이지로 리다이렉션이 되고요. 뭔가 놓친 부분이 있는건가요?? 작성한 소스코드 링크를 올려드릴테니 확인해주시면 감사하겠습니다. https://drive.google.com/file/d/1NofoiWcbaZrAl8DV-ZlZREclhx7qlrrX
강의를 만드는 시점에는 let 변수와 const 변수가 브라우저 디버거 창의 오른쪽에 표시되지 않았으나, 2021.02.13 기준, 질문을 받고 확인해보니 표시됩니다. 변경되었습니다. 표시되더라도 변수 앞에서 호이스팅으로 let 변수, const 변수를 사용할 수 없으며 에러가 발생합니다만, 블록에 작성된 변수를 표시하여 사용의 편리를 제공하기 위한 것으로 생각됩니다. 바로 아래 질문에 화면 캡처가 있으니 참조하기 바랍니다.
7분 즘에 MemberRepository 클래스르 만들고 @PersistenceContext 어노테이션을 private EntityManager em; 에 붙였는데 원래 정석대로라면 팩토리를 만들고 그걸로 엔티티매니저를 반환받는거였는데 이 어노테이션으로 그 과정을 스킵한다고 봐도 되나요? 팩토리 만들 때 마다 비용이 많이 소모된다고 알고있는데 이 어노테이션도 똑같이 팩토리를 한번만 만들고 그 팩토리로 엔티티매니저를 반환하나요? 그렇다면 이 과정을 알고 있다는 전제 하에 그냥 간단하게 @Autowired 같은 거라고 보면 될까요 ㅎㅎ...
class Listener { Socket _listenSocket; Action<Socket> _onAcceptHandler; public void Init(IPEndPoint endPoint, Action<Socket> onAcceptHandler) { // 문지기 생성 : 첫번째 인자에 네트워크 주소를 넣어줌 _listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _onAcceptHandler += onAcceptHandler; // 연결 // 문지기 교육을 시킴 : 식당 주소와 포트번호를 기입 _listenSocket.Bind(endPoint); // 영업 시작 : 리슨 소켓을 리슨 상태로 둔다. // backlog : 최대 대기수 _listenSocket.Listen(10); // *** 초기화를 하는 시점에 등록을 해줄 것 // 이 상태에서 클라가 connect 요청이 왔다고 한다면 // 콜백 방식으로 OnAcceptCompletd 함수 호출 된다. // 비동기 방식으로 예약만 하는 것 // 낚시대를 10개를 꼽아 놓는다. 물고기가 많으면 ... // 문지기 10개 버젼 for(int i = 0; i<10; i++) { // 문지기 1 버젼 SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); RegisterAccept(args); } } 수업 예제 코드 중에 Listen 클래스 를 작성하실 때 리슨 소켓 하나 만들어주고 그놈을 서버 컴퓨터에 바인딩을 시켜준다음 리슨 함수를 호출해 주고, 이상태에서 클라쪽에서 신호가 오면 그 다음 처리를 해주는 코드 설명이셨는데 여기서 리슨 함수 인자를 10으로 놓고 for문을 10번 반복 하셔서 문지기를 10개를 생성하셨습니다. 질문 : 최대대기수가 10이라는 얘기는 클라이언트가 10명이 접속 한다는 얘기 인가요? 그래서 문지기를 10개를 생성 해주셨는지 이게 맞다면 클라이언트 접속이 대략 1000명을 예상한다면 리슨 함수 인자로 1000을 넣어줘야 하나요?
아무리 devtools 를 적용시켜봐도 리컴파일을 하고 새로고침을 해도 페이지 변하지 않길래 구글님에게 수소문 해본 결과 https://lejewk.github.io/springboot-devtool/ 이거대로 해보니 되네요. 혹시나 devtools 동작 안하시는 분들 참고하시라고 공유차원에서 올려봤습니다~
항상 좋은 강의와 빠른 답변 감사드립니다! 제가 Util Class의 GetOrAddComponent<T>(GameObject go) 함수에서 where T : UnityEngine.Component 작성하시는 부분에서요!(5:07) GetComponent<T> 함수는 오류가 안뜨지만 AddComponent<T> 함수는 오류가 뜨길래 F12로 확인해봤더니 GetComponent는 Object클래스에 정의되어 있지만 AddComponent는 GameObject 클래스에 정의되어 있는것 까지는 확인을 하였습니다.. 하지만 왜 T를 부모클래스인 Object로 한정하면 안되고Component로만 한정해야 AddComponent를 쓸 수 있는건지는 와 닿지가 않아 질문드립니다.. 설명 부탁드립니다...!🙏