Community

게시판

자유롭게 글을 작성하고, 지식을 공유하며 소통하는 공간입니다.

지식 공유

스크립트로 조회 수 올리기

async function testViewCount(noticeId, count) {   console.log(`🚀 [테스트 시작] ${noticeId}번 공지사항 조회수 ${count}회 증가 요청...`);      for (let i = 0; i < count; i++) {       try {           await fetch('/erp/app/work/noti/view', {               method: 'POST',                headers: {                   'Content-Type': 'application/x-www-form-urlencoded',               },               body: `notice_id=${noticeId}`            });                      console.log(`✅ ${i + 1}번째 요청 완료`);                      // 너무 빠르면 서버가 뻗을 수 있으니 0.1초 대기           await new Promise(resolve => setTimeout(resolve, 100));        } catch (error) {           console.error(`❌ ${i + 1}번째 요청 실패:`, error);       }   }   console.log(`🏁 [테스트 종료] 화면을 새로고침해서 1번 글의 조회수를 확인해 보세요!`);}// 1번 공지사항 조회수 100번 올리기 실행!testViewCount(1, 100);

지식 공유

Spring Boot 기본 사용법

```markdown # Spring Boot 기본 사용법 Spring Boot는 Java 플랫폼에서 신속하고 쉽게 애플리케이션을 개발할 수 있도록 돕는 프레임워크입니다. 이 블로그 게시글에서는 Spring Boot의 기본적인 사용법과 몇 가지 주요 기능에 대해 알아보겠습니다. 학습 목표는 최소한의 설정으로 애플리케이션을 시작하고, RESTful API를 구축하는 것입니다. ## Spring Boot 설정 Spring Boot를 시작하기 위해 필요한 기본 설정을 구성합니다. Spring Initializr를 사용하여 프로젝트를 생성하는 방법을 소개하겠습니다. 1. [Spring Initializr](https://start.spring.io/)에 접속합니다. 2. 다음과 같은 기준을 따라 프로젝트를 설정합니다: - Project: Maven Project - Language: Java - Spring Boot: 2.5.4 (최신 버전을 선택) - Dependecies: Spring Web 3. `Generate` 버튼을 클릭하여 ZIP 파일을 다운로드하고, 압축을 풀어 IDE에서 프로젝트를 엽니다. 그 다음, 기본 애플리케이션을 생성합니다. `src/main/java/com/example/demo/DemoApplication.java` 파일에 다음 코드를 추가합니다: ```java package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` ## RESTful API 구축 Spring Boot에서는 간단한 RESTful API를 만들 수 있습니다. 이를 위해 Controller 클래스를 추가하고, GET 요청을 처리하는 메서드를 정의해 보겠습니다. `src/main/java/com/example/demo/HelloController.java` 파일을 생성하고 다음 코드를 추가합니다: ```java package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, Spring Boot!"; } } ``` 이제 비즈니스 로직이 구현된 상태로, HTTP GET 요청을 처리하는 `/hello` 엔드포인트가 생성되었습니다. 애플리케이션을 실행하면 Spring Boot가 내장된 톰캣 서버를 시작하고, 기본적으로 `http://localhost:8080/hello` URL에서 API를 테스트할 수 있습니다. 브라우저나 Postman을 사용하여 GET 요청을 보내면 "Hello, Spring Boot!"라는 응답을 확인할 수 있습니다. ## 결론 이 글에서는 Spring Boot의 기초적인 설정과 간단한 RESTful API 구축 방법에 대해 소개했습니다. Spring Boot는 설정의 간소화와 강력한 기능 덕분에 많은 개발자들에게 사랑받고 있습니다. 이제 여러분은 Spring Boot의 기본 모습을 이해했으니, 더 깊이 있는 기능들을 탐색해 보시기 바랍니다. 데이터베이스 연동, 보안 설정, 테스트 등 다양한 기능들을 활용하여 더욱 완성도 높은 애플리케이션을 개발할 수 있습니다. ```

지식 공유

폐쇄망에서 웹서버(Apache) 구성하기

## Docker OS 컨테이너 준비 1. 이미지를 받는다. [rocky linux 8.10] docker pull rockylinux/rockylinux:8.10 2. 편하게 작업 할 컨테이너를 하나 띄우고 쉘로 접근한다. docker run -it --name rocky-localrepo rockylinux/rockylinux:8.10 /bin/bash ## 어떤 패키지를 오프라인에서 설치하게 만들지 정한다. 우리가 미리 받아오는 RPM 목록이 곧 그쪽이 쓸 수 있는 설치 가능 목록이 된다. 예시로 httpd, mod\_ssl, php, openssl, vim, 이런 식으로 결정한다고 하자. 참고로 Rocky Linux에서 의존성까지 같이 받아오려면 dnf download를 쓴다. 1. 필요한 유틸 설치 dnf install -y dnf-plugins-core createrepo tar * dnf-plugins-core 안에 dnf download 들어있다. * createrepo는 로컬 리포지토리 메타데이터 만드는 툴. * tar는 마지막에 묶어서 전달 2. RPM들을 모아 둘 디렉토리 생성 mkdir -p /repo/base cd /repo/base 3. 의존성 가져오기 dnf download --resolve httpd * --resolve를 붙이면 httpd가 필요로 하는 의존 라이브러리까지 전부 rpm 파일로 같이 떨어진다. 원하는 다른 패키지도 계속 추가로 긁어올 수 있다. * dnf download --resolve mod\_ssl * dnf download --resolve php * dnf download --resolve openssl * dnf download --resolve vim-enhanced ## 핵심 요약 1. Windows에서: * docker run -it rockylinux:8.10 * 컨테이너 안에서 dnf install -y dnf-plugins-core createrepo tar * /repo/base 폴더 만들고 dnf download --resolve * createrepo /repo/base * /repo/local-httpd.repo 만들어두기 * tar czvf /repo\_bundle.tgz /repo * docker cp로 호스트로 꺼냄 2. 폐쇄망 Rocky 서버에서: * /opt/localrepo 에 압축 풀기 * /etc/yum.repos.d/ 에 .repo 복사 * dnf install 테스트 # 리버스 프록시 설정 ### httpd.conf LoadModule proxy\_module modules/mod\_proxy.so LoadModule proxy\_http\_module modules/mod\_proxy\_http.so LoadModule ssl\_module modules/mod\_ssl.so ServerName otp.pola.or.kr ``` SSLEngine on SSLCertificateFile /path/to/otp.pola.or.kr.crt SSLCertificateKeyFile /path/to/otp.pola.or.kr.key SSLCertificateChainFile /path/to/chain.pem # ↑ DMZ 웹서버가 직접 HTTPS를 종료(terminate)해야 하니까 인증서는 DMZ에 있어야 해 # 클라이언트가 /sln/... 으로 들어온 요청을 내부망 sso.pola.or.kr로 프록시 ProxyPreserveHost On ProxyPass /sln/ https://sso.pola.or.kr/sln/ ProxyPassReverse /sln/ https://sso.pola.or.kr/sln/ # (선택) 특정 URI만 보낼 수도 있음. 예: /sln/pola/user/regist/step 만 # ProxyPass /sln/pola/user/regist/step https://sso.pola.or.kr/sln/pola/user/regist/step # ProxyPassReverse /sln/pola/user/regist/step https://sso.pola.or.kr/sln/pola/user/regist/step # 보안 헤더 같은 것도 보통 여기서 달아줌 RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s RequestHeader set X-Forwarded-Host %{HOST}s ```