개발 지식 22

Json을 읽어올 때 BufferedReader.readLine() 사용을 조심해야하는 이유

서버로부터 Json을 읽어올 때 BufferedReader의 readLine()을 사용하였다. 콘솔에 잘 가져오나 찍어보아도 Json 데이터 모두를 가져오기에 이상이 없는 줄 알았다. 하지만 팀장님이 말씀하시길 이 메소드를 사용하면 문제가 발생할 수도 있다고 하였다. 한 줄로 서버가 Json을 전송하였기에 readLine()을 사용할 경우 한 줄을 읽을 때 끝까지 읽을 수 있는 것이지 이렇게 줄을 분리하여 Json 데이터를 보낼 경우 readLine()을 사용하면 첫 줄 데이터("{")만 읽게 되는 문제가 발생한다. 따라서 사전에 이러한 문제를 방지하기 위해서는 다른 방법을 사용할 필요가 있다. 위의 예시와 같이 만들어 주어 한 줄씩(readLine이기에 다음 번에 호출 시 마지막 호출 된 다음 줄 부터..

개발 지식 2020.11.23

JavaScript의 배열 선언 방식과 그에따른 '==', '===' 연산자 사용시 다른 점 정리

JavaScript 배열 선언하는 방식은 2가지가 있음 Array 객체를 이용한 선언 : let arr = new Array(); 객체 리터럴을 이용한 선언 : let arr = []; new Array()보다 []의 선호도가 높다. new Array의 constructor에 하나의 숫자만 넣으면 배열의 크기로 인식하지만, 두 개 이상의 숫자를 전달하면 전달받은 값으로 배열을 초기화한다. 따라서 하나의 숫자만 넣은 배열은 만들 수가 없다. '==' 연산자 : 서로 다른 유형의 두 변수 '값'만 비교한다. 0 == '' //true 0 == '0' //true 1 == true //true false == '0' //true null == undefined //true false == null //fals..

개발 지식 2020.11.22

필드, 변수, static, final

왜 필드로 선언해야하는지, 왜 변수로 선언해야하는지 논리적인 이유를 잘 따져서 코드를 작성해야 한다. 또한 if문, try~catch문 등의 블럭 안에서 변수를 선언해야할지, 밖에서 해야할지 등의 이유도 잘 생각해야 한다. 항상 필드나 변수를 선언할 때는 큰 범위가 아닌 작은 범위의 키워드부터 사용하는 습관을 가져야 한다. 필드 : 여러 메소드에서 공유할 일이 있을 때만 필드로 선언하기 변수 : 한 메소드에서만 참조한다면 메소드 변수로 선언하기(메소드가 끝나도 값을 계속 유지해야할 메소드 변수가 있다면?) static : 클래스당 1개가 필요해서 객체들이 공유를 할 때 사용할 키워드 final : 선언을 하고 더이상 값을 변경하면 안될 뿐더러 변경할 기회도 주면 안될 때 사용할 키워드

개발 지식 2020.11.14

Java의 synchronized 키워드에 대한 고찰

메소드의 변수들로 사용해도 될 것들을 생각없이 전부 클래스단 필드로 사용하는 습관이 있었다. 따라서 하나의 객체가 생성되고 필드값들은 공유가 되기에 메소드에서 계속 동기화 문제가 생겼었다. 그래서 해결한 방법이 메소드에 synchronized 키워드를 사용하였는데 이 또한 문제를 문제로 덮어버리는 꼴이 되었다. 왜냐하면 synchronized 키워드를 쓰게 된다면 멀티 요청이 들어오는 환경에서 순차적으로 일을 처리하기에 크기가 큰 요청이 들어오면 다른 요청들은 그 요청이 끝날 때까지 기다리는 등 속도의 문제가 생기기 때문이다. 따라서 synchronized 키워드는 최대한 안쓰는 것이 좋다.

개발 지식 2020.11.14

DAO, DTO

DAO(Data Access Object) : 실제로 DB에 접근하는 객체이다.(Persistence Layer(DB에 data를 CRUD하는 계층)이다.) DTO(Data Transfer Object) : 계층 간 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체이다. DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO의 모습으로 바뀌게 된다. 로직을 갖고 있지 않는 순수한 데이터 객체이며 getter/setter 메소드만을 갖는다. 하지만 DB에서 받아온 값을 임의로 변경할 필요가 없기 때문에 DTO 클래스에는 setter가 없다.(대신 생성자에서 값을 할당한다.) cf. Entity Class : 실제 DB의 테이블과 매칭될 클래스 참..

개발 지식 2020.10.05

REST란?

REST(Representational State Transfer) : 자원을 이름으로 구하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다. 자원(resource)의 표현(representation)에 의한 상태 전달 자원 : 해당 소프트웨어가 관리하는 모든 것(문서, 그림, 데이터, 해당 소프트웨어 자체 상태(정보) 전달 : 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다. JSON, XML을 통해 데이터를 주고 받는 것이 일반적이다. REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다. REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다. REST 구체적인 개념 : ..

개발 지식 2020.09.26

디자인 패턴

MVC(Model + View + Controller) Model : 애플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분 View : 사용자에게 보여지는 UI 부분 Controller : 사용자의 입력(Action)을 받고 처리하는 부분 동작 순서 : 사용자의 Action들은 Controller에 들어오고 Controller는 사용자의 Action을 확인하고 Model을 업데이트 한다. 또한 Controller는 Model을 나타내줄 View를 선택한다. View는 모델을 이용하여 화면을 나타낸다. 특징 : Controller는 여러개의 View를 선택할 수 있는 1:n 구조이다. Controller는 View를 선택할 뿐 직접 업데이트하지 않는다.(View는 Controller를 알지 못한다...

개발 지식 2020.09.26

HTTP 상태 코드 정리

성공응답 200 : 클라이언트의 요청을 정상적으로 수행함 201 : 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨(POST를 통한 리소스 생성 작업 시) 리다이렉션 메시지 301 : 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드 클라이언트 에러 응답 400 : 클라이언트의 요청이 부적절 할 경우 사용하는 응답 코드 401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드 403 : 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드(403보다는 400이나 404를 사용할 것을 권고. 403 자체가 리소스가 존재한다는 뜻이기 때문에) 404 : 서버가 요청받은 리..

개발 지식 2020.09.23