분류 전체보기136 [알고리즘, BOJ] 1766 문제집 - java 문제민오는 1번부터 N번까지 총 N개의 문제로 되어 있는 문제집을 풀려고 한다. 문제는 난이도 순서로 출제되어 있다. 즉 1번 문제가 가장 쉬운 문제이고 N번 문제가 가장 어려운 문제가 된다.어떤 문제부터 풀까 고민하면서 문제를 훑어보던 민오는, 몇몇 문제들 사이에는 '먼저 푸는 것이 좋은 문제'가 있다는 것을 알게 되었다. 예를 들어 1번 문제를 풀고 나면 4번 문제가 쉽게 풀린다거나 하는 식이다. 민오는 다음의 세 가지 조건에 따라 문제를 풀 순서를 정하기로 하였다.N개의 문제는 모두 풀어야 한다.먼저 푸는 것이 좋은 문제가 있는 문제는, 먼저 푸는 것이 좋은 문제를 반드시 먼저 풀어야 한다.가능하면 쉬운 문제부터 풀어야 한다. 예를 들어서 네 개의 문제가 있다고 하자. 4번 문제는 2번 문제보다 먼.. 알고리즘 2024. 6. 27. 21. 세션과 쿠키의 차이점 Web 생태계에서 HTTP 프로토콜은 상태를 유지하지 않는다는 특성 때문에 사용자의 상태를 유지하기 위한 수단으로 오랜 기간 사용되었던 것은 세션과 쿠키이다. 사용자는 웹 애플리케이션을 사용하는 동안 정보를 계속 유지하거나 전달할 수 있다. 유사한 목적을 가지고 사용되는 세션과 쿠키가 어떤 차이점을 가지는 지 알아보자. 1. 저장 위치 세션은 서버 측에 데이터를 저장하는 기술이며, 주로 사용자의 상태를 유지하기 위해 세션 변수를 저장하는 데 활용된다. 사용자가 웹 페이지에 접속하면 서버는 해당 사용자에 대한 고유한 세션을 생성하고, 세션 변수에 정보를 저장하여 상태를 유지한다. 반면 쿠키는 클라이언트 측에 데이터를 저장하는 작은 텍스트 파일로, 사용자의 브라우저에 저장됩니다. 쿠키는 주로 사용자가 웹 사.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 12. 14. 성능 판단을 위한 대표적인 지표 Throughput(처리량) 시간당 처리량을 의미한다. 이 처리량이라는 것이 사실 추상적인 의미이므로 구체적인 수치를 의미할 때는 보통 TPS(Transaction per secons)나 RPS(Request per seconds) 등으로 이야기한다. 처리량이 클수록 더 좋은 성능을 의미한다. TPS 여기서 Transaction은 DB 트랜잭션 뿐 만을 의미하는 것이 아니라 Business의 한 사이클을 트랜잭션이라 의미한다. 유저 수에 따라 TPS는 지속해서 증가하다가 더 이상 증가하지 않고 유지되는 시점을 Saturation Point(포화 지점)라고 한다. 만약 이 지점을 지난후에 TPS가 떨어지게 된다면 튜닝이 필요한 시스템을 의미하게 된다. 포화지점은 '초당 처리할 수 있는 Transaction.. 개발일기 2023. 12. 14. 성능 테스트의 목적 성능 테스트는 시스템의 ‘고가용성’을 위해 문제점을 미리 파악하고 이를 방지하기 위해 수행된다. 시스템 성능에 문제를 줄 수 있는 요소는 컴퓨팅 리소스 사용 급증으로 인한 성능 저하, 급증한 DB I/O로 인한 blocking, DBMS에 급증한 request로 인한 DB lock 등이 있다. 또한, 성능 테스트의 대표적인 유형으로 ‘부하테스트(load test)’와 ‘스트레스 테스트(stress test)’가 있다. 1. 부하테스트(load test) 부하테스트는 시스템이 정상적인 작업 부하를 처리할 수 있는지 확인하는 것이 주된 목적으로 ‘임계 값 한계에 도달할 때까지’ 시스템의 부하를 지속적으로 증가시켜 시스템의 성능을 관찰하는 성능테스트이다. 시스템이 특정 부하 수준에서 어떻게 동작하는지를 평가하.. 개발일기 2023. 12. 13. [git] 이미 존재하는 폴더 깃헙에 올리기 1. github 저장소 생성 2. git에 올릴 root 폴더로 이동한 후 해당 폴더에서 터미널 열어주기 3. git directory 초기화 git init 4. commit 올리기 git add . git commit -m "First Commit" 5. remote repository 등록 git remote add origin [ github URL ] git push --set-upstream origin main 6. 깃헙 확인하기 cs/Git 2023. 11. 28. [Spring, Java] 외부 API 호출 Java 또는 Spring에서 외부 API를 호출하는 방법은 여러 가지이다. 1. HttpURLConnection/URLConnection 2. HttpClient 3. RestTemplate 4. WebClient 5. OpenFeign 빠른 사용/개발을 위해서는 사용하고자 하는 각각의 API vendor가 제공하는 클라이언트 라이브러리 자체를 이용해도 되겠지만, 특정 API에 종속되므로 최대한 지양하고자 한다. 또한, 각각의 기술들이 장단점 및 성격이 다르므로 상황에 맞게 선택하여 사용하여야 한다. HttpURLConnection/URLConnection 자바에서 제공하는 API 통신을 위한 클래스이다. 순수 자바 코드로 동작하며 URL을 이용하여 외부 API를 통해 데이터를 전송 및 조회할 수 있다.. 개발일기 2023. 11. 15. ssafy 신한 해커톤 지원 결과부터 말하면 해커톤 본선 진출에 실패했지만, 경험이 흥미로워서 한번 포스팅해본다. 기획 배경 21세기 대한민국은 인구 감소와 고령화의 본격적인 가속화를 경험하고 있습니다. 이러한 현상이 점차 사회의 모습을 흔들고 있어 대안을 모색하는 것이 시급한 과제로 떠오르고 있습니다. 저희 “웨딩SOL루션”은 이 개발기획서를 통해 결혼에 대한 경제적 진입 장벽을 낮춰 인구 감소 문제에 대응할 수 있는 금융솔루션을 소개하고자 합니다. 통계청에 따르면 올 23년 2월 출생아가 1만 9939명으로 신고되었습니다. 2월 기준 1981년 이후 처음으로 출생아수 2만명 선이 붕괴된 현실입니다. 연초부터 2만명 고지가 무너졌기 때문에 합계 출산율이 역대 최저였던 지난해(0.78명)보다 출산율이 더 낮아질 것이라는 경고가 나오.. 개발일기 2023. 10. 12. 20. JSP 기본 객체 JSP는 9개의 내장 객체를 기본으로 가지고 있다. 아래는 그 종류와 설명에 대한 나열이다. 기본 객체 실제 타입 설명 기본 객체 실제 타입 설명 request javax(jakarta).servlet.http.HttpServletRequest 클라이언트의 요청정보 저장 response javax.servlet.http.HttpServletResponse 응답정보 저장 pageContext javax.servlet.jsp.PageContext JSP 페이지의 정보 저장 session javax.servlet.http.HttpSession HTTP 세션 정보 저장 application javax.servlet.ServletContext 웹 애플리케이션 정보 저장 out javax.servlet.jspJsp.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 10. 11. 19. Servlet과 JSP의 차이점 Servlet 서버에서 웹페이지를 동적으로 생성하거나 데이터 처리 수행을 위한 자바로 작성된 프로그램이다. servlet은 java 코드 안에 HTML 태그가 삽입된 자바 언어로 되어있다. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public ThreeParams extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); printWriter out = response... 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 10. 10. [이슈 로그] com.mysql.jdbc.Driver와 com.mysql.cj.jdbc.Driver 스프링 서버와 mysql을 연동하기 위해 application.yml에 DB 정보를 다음과 같이 작성하였다. 서버 구동에는 크리티컬한 문제가 없지만 유독 불편하게 빨간색으로 눈에 띄는 한줄이 있다. Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. "com.mysql.jdbc.Driver"가 deprecated 되었다고? "com.mysql.cj.jdbc.. 개발일기/이슈 로그 2023. 10. 10. 2. Chatbot 서비스 아키텍처 설정 웹 내에서 구현할 챗봇의 특징은 생각보다 간단하다. 1. 실시간성을 지원하지 않아도 된다. 챗봇 서버는 클라이언트에서 요청이 들어오면 이에 대한 적절한 응답을 Model 서버에서 받고 다시 Client server로 넘겨주는 1대1대화가 될 것이다. 사용자의 요청이 들어오면 응답이 나가는 구조이므로 실시간성을 지원하지 않아도 된다. 2. 채팅 내역을 저장하자. 좀 더 사용자 친화적인 서비스를 기획하기 위해서 채팅 내역을 저장하기로 결정했다. DB는 MySQL을 사용한다. 다만 로그인된 계정에 한해서 대화 내역을 30일간 저장하는 것으로 기준을 잡았다. 기준의 근거는 명확하지 않다. 실제 서비스가 된다면 개선되야겠지... 로그인되지 않은 사용자도 챗봇을 사용할 수 있지만, 이 때, 채팅 내역은 저장되지 않.. 카테고리 없음 2023. 10. 9. 18. Deep Copy vs Shallow Copy 알고리즘을 공부하며 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy), 이 둘의 차이점을 뼈저리게 느낀 JAVA 사용자가 꽤 많을 것이라 생각한다. 따라서 백 마디 말보다 코드 몇 줄이 더 효과적일 것이라는 생각으로 아래와 같은 코드를 작성하였다. List list = new ArrayList(); list.add(1); List copyList = list; copyList.add(2); System.out.println(list); System.out.println(copyList); /** * list : [1, 2] * copyList : [1, 2] */ 위와 같이 주소 값을 복사하는 의미로 Shallow Copy, 실제 값을 복사하는 의미로 Deep Copy를 구분하여 사용한.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 10. 5. 이전 1 ··· 6 7 8 9 10 11 12 다음