프로그래밍/개발 35

spring에서 api 요청하기

현재 개발하는 프로젝트에서 지도 api를 사용하게 될일이 생겼다. 정확히는 출발지와 목적지가 주어졌을때, 얼마나 걸리는지를 계산해서 거리와 시간을 가지고 비용 측정 및 차량을 추천해줘야 하는 상황이다. 우선, 이런저런 리서치를 해봤는데 spring에서 api를 요청할 일이 거의 없었나 자료들이 많지는 않았다. front에서 요청하듯이 하면 되겠지? 라는 생각 정도 였다. https://github.com/googlemaps/google-maps-services-java GitHub - googlemaps/google-maps-services-java: Java client library for Google Maps API Web Services Java client library for Google Ma..

자바의 이모저모 : static, final, 그리고 캐스팅

public class PostRepository { private static final Logger logger = LoggerFactory.getLogger(PostRepository.class); } 자바를 다루다 보면 위와 같은 변수선언들을 정말 자주 볼수 있다. 심지어 static final을 사용하지않으면 intellij에서 사용하라고 권장하기도 한다. 지금까지는 순순히 하라는대로 했지만 이제는 왜 그렇게 해야되는지를 알아보려고한다. public class PostRepository { private Logger logger = LoggerFactory.getLogger(PostRepository.class); } 아래와 같은 코드도 역시 가능하다. 그리고 C, C++을 사용할때는 이러한 경..

IO와 NIO

WAS개발 중에 있었던 요구사항 중 하나이다. 만약 java.nio를 사용하고 있었다면 java.io를 사용하도록 수정한다. 이 요구사항을 봤을때 처음 드는 생각은 내가 io를 어디에서 쓰고 nio를 어디서 쓰지? 였고 그리고 굳이 왜? 라는 생각이 들었다. 그렇다면 io, nio가 무엇인지 먼저 살펴 보도록 하자. io는 input/ output의 줄인말이고 chatgpt선생님의 말을 참고하자면 I/O(Input/Output)와 NIO(New I/O)는 Java에서 데이터를 읽고 쓰는 방법을 개선하기 위해 도입된 두 가지 접근 방식입니다. I/O (기존의 전통적인 입출력 방식): 입출력 작업은 스트림(Stream)을 통해 이루어집니다. 입력 스트림(Input Stream)은 데이터를 읽고, 출력 스트림..

나의 WAS 변경점, 한계 그리고 개선사항

지난 내용은 여기와 같다. https://b1ackhand.tistory.com/262 이후에 나의 WAS를 어떻게 발전시켰고 어떤 문제점을 마주했는지 기록해보려고한다. 발전사항 및 변경점 나의 구조를 요약하자면 Request에서 api 처리를 Response에서 정적인 컨텐츠를 반환한다. 그림으로 보면 위와 같다. 다음으로 구현해야 될 내용은 Post요청 -> Session 로그인 -> 동적인 HTML -> 게시판 처리 이와 같다. 먼저 Post요청을 처리하기 위해 Request에 Body Parser라는 클래스를 만들어줬다. Post요청에서 지금은 post request x-www-form-urlencoded 형태로 들어오지만 다른 스프링 프로젝트를 해보면 json형태로 오거나 다양한 형태로 오기 때..

MVC패턴 왜 쓸까요

네.. 사실 저도 잘 모릅니다. Spring 하면서 MVC패턴 학습이 딸려오는데, WAS제작 하면서 그룹회고를 했을때 많은 팀원들이 MVC패턴을 따라가는 것을 보았고 더 알아보고자 정리 해보게 되었습니다. MVC 의미 Model : 데이터와 비즈니스 로직관리 View : 레이아웃과 화면 처리 Controller : 모델과 뷰로 명령을 전달 MVC패턴은 디자인 패턴중 하나로 비즈니스로직과 화면을 구분하는데 중점을 두고 있다. 사용자가 Controller에 요청을보내면 Model에서 처리를 하고 View를 반환한다. 왜 스프링이 MVC 패턴인지를 알기 위해서는 스프링에대해서 더 이해해야할 것 같다. MVC 패턴 에서도 구조가 여러가지 있고 그중에서도 Spring 구조 에 관해서 유명한 위의 그림이 있다. 각..

if문을 줄이는 방향에 대한 고찰

WAS를 이어서 개발중에 response 반환형을 index.html에서 json등으로 확장하기위해서 hashmap 형태를 byte[]로 변환했고 이 과정에서 각기 다른 html, css, js를 if 문으로 casework하기에는 가독성이 너무 떨어지기 때문에 어떻게 처리해야될까 고민하게 되었다. if(MIME == HTML){ // } else if(MIME == CSS){ // } 이런형태가 되지 않을까 싶다. MIME타입의 경우에는 개수가 정해져있어서 switch문등으로 처리해 줄 수 있지 않을까 싶지만 비슷한 다른 상황에 확장가능성까지 고려한다면 어떻게 해야할까? 예전에도 비슷한 상황이 카카오테크캠퍼스 최종프로젝트 때 있었다. 당시에는 gpt한테 물어볼 생각을 못해서 멘토님께 물어봤는데 친절하게..

자바의 멀티스레드

WAS구현 중 첫번쨰 요구사항 중 하나가 Java Thread기반으로 작성되어 있는 현재 프로젝트를 Concurrent패키지를 사용하도록 변경하라는 것이었다. 멀티 쓰레드 프로그래밍도 운영체제 시간 과제로 한번 써본거 외에는 사용해본적이없고 해당 요구사항 중 스레드 모델과 버전별 변경점에 대해 학습하라는 내용이 있어 공부해보게 되었다. 우선 Concurrent패키지가 무엇인지 먼저알아보자. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html java.util.concurrent (Java Platform SE 8 ) Class Summary Class Description AbstractExecutorSer..

HTTP Response, Request에 관하여

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 정말 자세한 내용은 https://www3.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html In Introduction to HTTP Basics HTTP (HyperText Transfer Protocol) Basics Introduction The WEB Internet (or The Web) is a massive distributed client/server information system as depicted in the following diagram. Many applications are running concurrently over t..

몰랐던 Git에 관한 이야기

대학교 처음 들어와서 동아리에서 게임개발을 배우고 함께 배웠던 것이 Git 사용법이다. 깃은 버전 관리 툴로 개발 할 때 협업이나 프로젝트 관리 면에서 도움을 주는 도구다. 게임 개발 뿐만아니라 웹 프로젝트, 알고리즘 문제 기록 등 여러 방면으로 써왔고 사용법이 익숙하지 않을 때 빨간 줄로 이유를 알 수 없는 오류가 뜨면 파일을 지우고 깃을 다시 clone 해오거나 했었는데 이제는 능숙하게 merge 할 수 있다. 그래서 나는 내가 git을 잘 활용 하고 있는줄 알았다. 어떤 강의를 듣기 전까지 Git 객체에 해당하는 것들을 고르시오. 라는 간단한 퀴즈였고 나는 처음 들어보는 용어였다. Git에 객체라는게 있었나? 놀랍게도 있다. https://git-scm.com/book/ko/v2/Git%EC%9D%..

WAS란 무엇인가?

이번에 개인 프로젝트로 정적인 컨텐츠를 처리하는 WAS만들기를 JAVA로 개발하게 되었다. 스프링에 있는 기능들만 사용해 봤던 나는 WAS..? 어디서 들어 봤던 건데 싶었다. 첫 번째 요구사항으로 받은 것이 index.html을 브라우저에 띄우는 것 이었다. 해당 요구사항을 보고 바로 개발을 시작한 사람들도 있었지만 나 같은 경우에는 내가 무엇을 어떤일을 해야되는 프로그램을 만들어야 되는지를 알아보는 것으로 시작하게 되었다. Wiki백과에서의 정의를 보면 다음과 같다. WAS ( Web Application Server ) 는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크 - 프로그램 실행 환경과 데이터베이스 접속기능 제공 - 여러개의 트랜잭션 관리 - 업무 처리..