썸네일 FetchType.LAZY와 Proxy, 그리고 Spring의 Transaction 처리 오늘 할 것. 앱센터 활동으로 학기 중 약소하게나마 ToDo List 프로젝트를 진행하고 있다. 현재 JWT를 이용한 로그인 기능을 개발중인데 다른 바보같은 실수들도 많았지만 그 중에서도 알고도 틀린 에러를 소개하려고 한다. LazyInitializationException 그래. 어디서 많이 봐서 이젠 익숙하다 못해 지겨울 지경이다. 아직까지 직접 마주한 적은 없었는데 굳이굳이 틀리며 또 배우게 되는구나. 이번 글에선 LazyInitializationException이 발생한 이유와 javax.persistence의 enum 클래스, 그 중에도 FetchType.LAZY와 Proxy에 대해 알아본다. 현재 상황 우선 로그를 보자. org.hibernate.LazyInitializationExceptio..
세션은 어디에 저장될까? (HttpSession, Cookie and Session) 쿠키와 더불어 Session은 웹에서 널리 사용된다. 주로 유저의 로그인 정보를 다른 페이지로 넘어가서도 유지하기 위해 사용한다. 쿠키와 세션을 비교하는게 그다지 옳바른 방법같지는 않아보이나, 매번 그렇게 설명한다. 사실 이번 포스팅엔 그게 중요한게 아니고 '쿠키는 클라이언트에, 세션은 서버에 데이터를 저장한다'가 핵심이다. 그래. 쿠키는 브라우저에 누구나가 확인할 수 있는 방법으로 저장된다. 반면에 세션 방식은 데이터를 서버에 저장하고 브라우저는 세션ID만 쿠키로 저장한다. 브라우저는 서버에 요청을 보낼 때 쿠키 정보를 함께 보내고, 서버는 쿠키에 담긴 세션 ID를 이용해 세션 정보를 조회한다. 근데, 그래서 세션은 서버 '어디에' 저장되는데? 서버 구성에 따라 달라지겠지만, 크게 두 가지 선택이 있다..
썸네일 클래스 분리 시, #include 문의 위치 C++ 공부를 하다 문득 궁금해졌다. 클래스 분리가 없는 자바와는 다르게, C++에서는 클래스를 .h 헤더파일과 .cpp 소스파일로 나누어 구현한다. 좀 더 정확하게 말하면 클래스를 정의부와 구현부로 나누어 작성하는 것이다. 보통 소스파일은 헤더파일을 include하여 메소드를 구현하게 되는데, 이 떄 궁금한게 생겼다. 외부 클래스나 라이브러리를 써야하는 상황이라면, 어느 곳에서 include하는게 맞을까? .cpp 파일에 쓰면 당연히 상관이 없고, .h 파일에 써도 어차피 헤더파이을 include 하기 때문에 정상적으로 작동한다. 앞서 몇 시간동안 공부를 하다보니 머리가 둔해져서 이렇다 할 결론이 안 나오더라. 결국 궁금해서 찾아보았다. 그렇게, 2009년에 나와 같은 질문이 올라온 것을 발견한다. 그..
콜백 메소드(Callback Method)는 뭘까. A callback function is a function passed into another function as an argument, which is then invoked inside the outer function to complete some kind of routine or action. Callback function - MDN Web Docs Glossary: Definitions of Web-related terms | MDN A callback function is a function passed into another function as an argument, which is then invoked inside the outer function to complete some k..
썸네일 Android Lifecycle Andorid System의 리소스 관리 전략 Android 시스템이 실행중일 때, 필요한 자원이 부족하게되면 실행중인 프로세스를 강제로 종료시킨다. 프로세스 종료는 프로세스 상태(status)에 따르며, 위 그림에서 forground process의 중요도가 가장 높고 empty processes 의 중요도가 가장 낮은 우선 순위를 갖는다. Empty process는 새롭게 실행된 app을 처리하기 위해 대기중인 프로세스로, 메모리를 차지하고 있는 상태를 말한다. Activity Stack 모든 Activity는 Activity Stack으로써 관리된다. Stack이란 이름에 맞게, 새로운 액티비티는 스택에 최상단에 추가되며 running activity가 된다. 스택의 최상단에서만 activity의 ..
캐리지 리턴(CR)과 라인피드(LF) 리눅스를 공부하다 read를 이용해 키 입력을 받던 중, 문득 캐리지 리턴(CR)과 라인피드(LF)에 대해 궁금해졌다. 컴퓨터구조에서 문자코드를 처음 봤을 때도, 궁금했던 부분이었는데 어찌저찌 넘어가게 돼서 이제와 정리해보려 한다. 엔터키를 구성하는 요소 캐리지 리턴과 라인피드는 두개가 하나의 엔터키를 구성한다. 캐리지 리턴은 13, 라인피드는 10. 각각 유니코드로 나타내는 번호로, 13과 10이 모두 입력돼야 비로소 우리가 아는 엔터가 작동되는 것이다. 이 둘은 개행문자로, 각각 \r과 \n으로 나타낼 수 있다. 캐리지 리턴과 라인피드의 의미 사실 이 둘의 개념은 구식 타자기에서 가져온 것이다. 옛날 타자기를 생각해보자. 한자 한자 써내려가고 종이의 끝에 도달하면, 팅! 요란한 소리와 함께 다시 종이..
속성(Property)과 필드(Field)의 차이 C#을 공부하면서 속성이라는 개념이 헷갈리기 시작했다. JAVA에서는 속성을 getter와 setter로 정의해서 멤버변수를 은닉화하는 동시에 필드를 사용할 수 있게 하는, 필드를 다루기 위해 메서드를 정의하는 방법이라고 이해하고 넘어갔다. 반면, C#에서는(C#과 마이크로소프트가 제시하는 코딩스타일에 따르면) 속성(Property)란 클래스의 구성요소로써 Public Data Member처럼 사용될 수 있지만, '접근자'라는 특수한 메서드라는 것이다. 마이크로소프트가 제시하는 속성은 무엇이고 왜 써야되는 걸까? 이번 시간에는 속성과 필드에 대해 알아본다. A property is a member that provides a flexible mechanism to read, write, or comput..
[모바일] Context 선택 kotlin 코드를 작성 시, 이벤트 처리에서 Context를 인자로 갖는 메소드가 많다. Context를 지정 시, 대표적으로 사용할 수 있는 것은 applicationContext와 this가 있다. 간단히 말하자면 applicationContext의 경우 app이 종료될때까지, this는 현재 activity 가 종료 될 때 까지 유지된다.
floating point system에서 지수부와 가수부의 개수 수치해석학을 공부하던 중 IEEE 754, 64bits floating point system에서 지수부와 가수부의 개수가 궁금해졌다. 처음 의문이 들기 시작한건 수치해석학 교재에 32비트 부동소수점수의 표현이 부호 1비트, 지수 7비트, 가수 24비트라고 써져있어서이다. 분명 기초 cs로 컴퓨터구조를 공부할땐, 1,8,23이였는데 이건뭐지 싶었다. 문제는 아직 더 있다. 더 나아가다보니 64비트 부동소수점수에서 부호 1비트, 지수 11비트, 가수 52비트는 같게 나왔지만, 사실은 가수부분은 1bit + 52bits로 53개의 bit를 가진다는 설명이있었다. 멘붕이다. 이게 뭔 소린가 싶다. 열심히 구글링해 stack overflow의 검색결과 64bit floating point system에서 mai..