본문 바로가기

전체 글

(166)
[ 인생퍼즐 ] 백엔드 사용 언어 변경 백엔드 사용 언어 변경 인생퍼즐의 백엔드는 기존에 NestJS로 작성을 했다. 이번에 코드를 리팩터링 하고 이후 유지보수를 위해 사용 언어를 Java로 변경하기로 했다. 또한 DI 등 객체지향 코드를 작성에 도움을 주는 Spring과 DB를 Java 컬렉션처럼 쓸 수 있게 해주는 JPA를 사용하기로 했다. 자바 스프링 자바 스프링은 객체 지향 언어를 더 잘 할 수 있도록 해주는 프레임워크이다. 좋은 객체지향 설계를 위한 SOLID원칙을 지키게 해 주며, 스프링 컨테이너를 통해 5가지 원칙 중 위반된 SRP/OCP/DIP를 보완해준다. 관심사를 사용 영역과 관리 영역으로 나누어 SRP, 사용 영역에 대한 확장은 쉽게 하며 변경은 어렵게 함으로 OCP를 보완한다. 마지막으로 관리 영역을 통해 객체 생성 및 ..
[ Core Java Volum ] Chapter 5 상속 기억나고 중요한 내용 - 상속은 superClass와 subClass 관계로 이루어진다. [ parentClass , childeClass 라고도 함 ] - private field의 접근 제어는 상속되지 않는다. - super를 통해 superClass의 생성자 호출 가능하다. - 자바는 다형성과 동적 바인딩을 통해 상위 클래스 타입으로 하위 클래스 객체를 참조하여 사용가능하게 만들었다. - 자바는 "Class" 클래스를 통해 모든 객체에 대한 런타임 식별자를 추적하며, 이것은 하나의 식별자로 상위 및 하위 클래스의 메서드 호출 시 적절한 메서드를 선택하는 데 사용된다. - superClass로 부터 확장된 모든 컬렉션을 상속 계층이라고 한다. - 상속의 상위 계층으로 올라갈수록 추상적이어야 하며, 이..
[ Core Java Volum ] Chapter 4 클래스와 객체 Class vs Object vs Instance - Class는 Object를 구현하기 위한 설계도 - Object는 현실에 구현될 수 있는 것 - Instance는 현실에 구현된 실체 [ 컴퓨터에서는 메모리에 올라간 Object ] Class 및 Instance 특징 - Class는 필드와 메서드로 구성된다. - Class간의 관계는 Dependence("use-a"), Aggregation("has-a"), Inheritance("is-a")가 있다. - 접근제어자 Private, Public, Protected, Default를 사용할 수 있다. - 메서드 호출은 Implicit[ Instance of Class ]와 Explicit[ Parameter of Method ] Parameter로 구..
[ Core Java Volum ] Chapter 3 자바의 기본 구조 C 와 달리 새로웠던 점 - 자바는 일반적인 종료 코드는 0 하나 뿐인다. 다른 코드로 프로그램 종료는 System.exit 를 통해서 가능하다. - 자바는 프로그램 이식성을 위해 원시 자료형의 범위를 고정했다. Unsigned 지원하지 않는 이유도 이와 같다. - 부동 소수점 계산은 이진수 시스템의 표현 때문에 오차가 존재한다. 정확한 수치 계산은 BigDecimal 클래스 사용을 통해 가능하다. - 자바는 10 버전부터 var 키워드를 제공한다. - 유니코드 인식은 u 개수의 상관 없이 마지막 u를 기준으로 이루어진다. -> ASCII와 유니코드 Conversion 과정 중 u가 더해질 수 있기 때문이다. - 자바는 C/C++과 달리 선언과 정의를 구별하지 않는다. - 문자열은 원소를 변경할 수 없는..
[ 인생퍼즐 ] 안드로이드 Recoil 사용할 때 글자 깨짐 이슈 안드로이드 실제 기기에 앱을 설치하고 테스트했을 때 한글 깨짐 현상이 발생했다. 시뮬레이터 상에서는 발생하지 않는 문제였기에 실제 기기 USB를 연결해 디버그 작업을 수행했다. 해결 방법 테스트에서 글자가 깨지는 화면과 깨지지 않는 화면 모두 존재했다. 두 화면의 소스 코드를 비교해보면 문제점을 찾고 해결 방안을 모색했다. 디버그 과정에서 Recoil이 TextInput에서 사용되었을 때 나타난다는 것을 발견했다. 그래서 Recoil을 useState를 변경해서 TextInput에서 사용을 했고 다른 화면으로 넘어갈 때 useState에 저장된 정보를 Recoil에 저장하는 방식으로 해결했다. 이슈 수정 코드 예시 1. 수정 전 코드 const [userName, setUserName] = useR..
[ 인생퍼즐 ] TypeORM Transaction 사용 Transaction 사용 이유 프로젝트 중 일부 로직에서 DB에 정보 저장은 관련 파일이 서버에 정상적으로 전송되었을 때 이루어져야 했다. 하지만 서버에 저장되어야 하는 파일 경로에 DB 정보 저장할 때 생기는 고유키가 필요했다. DB 정보 임시 저장 후 고유키로 완성된 파일 경로로 전송해야 했다. 전송이 성공했을 때 DB 정보를 저장 완료를 해야 했다. 그래서 성공 시 DB Commit, 실패 시 DB Rollback 할 수 있는 Transaction을 사용했다. Transaction 구현 1. EntityManager 사용 방식 async saveUser(){ await connection.getRepository(User).manager.transaction(async (manager) => { ..
[ 인생퍼즐 ] RN Navigation 화면 남는 문제 이슈 주인공 정보 수정 후 주인공 리스트를 리로딩하기 위해 Event Parameter를 넘기는 방법으로 만들어졌다. 이때 Navigation의 Navigate로 Event Parameter와 함께 페이지 이동을 했을 때 기존 화면이 남아 있는 문제가 발생했다. GoBack 사용 기존 화면을 없애기 위해 뒤 페이지로 이동하면서 현재 페이지를 삭제하는 GoBack 메서드 사용하기로 했다. 하지만 GoBack 메서드는 Parameter를 넘길 수 없기 때문에 이를 해결할 수 있는 방법이 필요했다. Function을 Parameter로 넘기기 주인공 리스트 화면에 UseState 생성 후 State를 변경할 수 있는 Function 선언했다. 선언한 Function은 필요한 페이지로 Parameter로 넘겨 ..
[Chapter 6] Hidden Markov Model Hidden Markov Model Markov Chain의 경우 실제 세계에서 관찰되는 연속된 사건의 확률을 계산할 때 사용된다. NLP에서 Part-Of-Speech-Tag처럼 현실 세계에서 관찰되지 않는 것이 있다. Hidden Markov Model은 관찰, 미관찰되는 연속된 사건의 확률을 사용하는 모델이다. Component Of Hidden Markov Model Markov Chain은 Set of State, Transition Probability Matrix, Start & End State 로 이루어져있다. Hidden Markov Model은 앞 3가지에 Sequence of Observation, Sequence of Observation Likelihood가 추가된 요소로 이루어..