인프런 커뮤니티 질문&답변

항상배고픔님의 프로필 이미지
항상배고픔

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

HttpServletRequest - 기본 사용법

콘솔 한글 깨짐

해결된 질문

작성

·

1K

·

수정됨

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)

아니요
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)

아니요
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
다른 프로젝트를 실행하면 콘솔에 한글이 안 깨지는데 해당 강의 대로 진행한 프로젝트는 한글이 깨집니다.


https://velog.io/@hsjung2015/Intellij-or-Eclipse%EC%BD%98%EC%86%94%EC%B0%BD%EC%97%90-%ED%95%9C%EA%B8%80%EC%9D%B4-%EA%B9%A8%EC%A0%B8%EC%84%9C-%EB%82%98%EC%98%AC%EB%95%8C-%EC%B5%9C%ED%9B%84%EC%9D%98-%EB%B0%A9%EB%B2%95
해당 사이트에 있는 3번까지 진행 했는데 한글이 깨지네여 ㅠㅠ

 

 

package hello.servlet.basic.request;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;


@WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse
            response) throws ServletException, IOException {
        printStartLine(request);
        printHeaderUtils(request);
        printEtc(request);
        response.getWriter().write("ok");
    }

    private static void printStartLine(HttpServletRequest request) {
        System.out.println("--- REQUEST-LINE - start ---");
        System.out.println("request.getMethod() = " + request.getMethod());
        System.out.println("request.getProtocol() = " + request.getProtocol());
        System.out.println("request.getScheme() = " + request.getScheme());
        System.out.println("request.getRequestURL() = " + request.getRequestURL());
        System.out.println("request.getRequestURI() = " + request.getRequestURI());
        System.out.println("request.getQueryString() = " +
                request.getQueryString());
        System.out.println("request.isSecure() = " + request.isSecure()); //https 사용 유뮤
        System.out.println("--- REQUEST-LINE - end ---");
        System.out.println();
    }

    private void printHeaderUtils(HttpServletRequest request) {
        System.out.println("--- Header 편의 조회 start ---");
        System.out.println("[Host 편의 조회]");
        System.out.println("request.getServerName() = " +
                request.getServerName()); //Host 헤더
        System.out.println("request.getServerPort() = " +
                request.getServerPort()); //Host 헤더
        System.out.println();
        System.out.println("[Accept-Language 편의 조회]");
        request.getLocales().asIterator()
                .forEachRemaining(locale -> System.out.println("locale = " +
                        locale));
        System.out.println("request.getLocale() = " + request.getLocale());
        System.out.println();
        System.out.println("[cookie 편의 조회]");
        if (request.getCookies() != null) {
            for (Cookie cookie : request.getCookies()) {
                System.out.println(cookie.getName() + ": " + cookie.getValue());
            }
        }
        System.out.println();
        System.out.println("[Content 편의 조회]");
        System.out.println("request.getContentType() = " +
                request.getContentType());
        System.out.println("request.getContentLength() = " +
                request.getContentLength());
        System.out.println("request.getCharacterEncoding() = " +
                request.getCharacterEncoding());
        System.out.println("--- Header 편의 조회 end ---");
        System.out.println();
    }

    private void printEtc(HttpServletRequest request) {
        System.out.println("--- 기타 조회 start ---");
        System.out.println("[Remote 정보]");
        System.out.println("request.getRemoteHost() = " +
                request.getRemoteHost()); //
        System.out.println("request.getRemoteAddr() = " +
                request.getRemoteAddr()); //
        System.out.println("request.getRemotePort() = " +
                request.getRemotePort()); //
        System.out.println();
        System.out.println("[Local 정보]");
        System.out.println("request.getLocalName() = " + request.getLocalName()); //
        System.out.println("request.getLocalAddr() = " + request.getLocalAddr()); //
        System.out.println("request.getLocalPort() = " + request.getLocalPort()); //
        System.out.println("--- 기타 조회 end ---");
        System.out.println();
    }
}

답변 1

0

안녕하세요. 김필준님, 공식 서포터즈 OMG입니다.

저의 경우 다음 링크(클릭)의 세번째 방법인 톰캣의 VM 옵션 방법으로 해결하였는데 확인해보시겠어요? 올리신 링크에는 소개되어 있지 않네요 ^^

해결이 안될 경우 첨부 드린 링크의 두번째 방법과 첫번째 방법(Transparent native-to-ascii conversion 도 체크)도 확인해주세요 😀

링크의 세가지 방법을 모두 시도하셔도 동일할 경우 링크의 인텔리제이 캐시 초기화 후, 인텔리제이 재 실행하여 확인해주세요!

 

감사합니다.

늦은 시간에 답변 감사합니다.
보내주신 링크에 3번째 방법을 진행하는데 에러사항이 있어서 질문드려요 ㅠㅠㅠㅠ
imageimage저는 톰캣 서버가 보이지 않는데 혹시 무료 버젼이라서 안 보이는건지... 궁금합니다
추가적으로 테스트 코드를 작성하는 공간에서 작성한 코드는 한글이 잘 나옵니다ㅠㅠㅠㅠ

그리고 이런 오류가 왜 발생하는지 대략적이라도 설명해주시면 감사하겠습니다.

내장 톰캣의 방법 링크를 첨부드려 설명드렸네요 ^^;

 

스프링부트 내장톰캣의 VM OPTION 설정을 하기 위한 방법은 다음과 같습니다.

  • 인텔리제이 화면 우측 상단의 프로젝트명+Application (화면 표기)를 클릭 후

Edit Configuration..을 클릭해주세요.

image

  • 입력은 Program arguments 영역에 해주세요.

image

추가 시도 방법

resources 프로젝트 하위의

application.properties 파일에 아래 코드를 추가하여 확인해주세요

server.servlet.encoding.force-response=true

 

오류 발생 원인

문자 인코딩 설정 문제 때문에 발생하는데요,

인텔리제이는 기본적으로 시스템의 기본 인코딩을 사용하는 반면 이 설정이 한글을 지원하는 인코딩(예: UTF-8)으로 되어 있지 않으면 한글이 제대로 표시되지 않을 수 있습니다.

 

감사합니다.

 

답변 너무 감사합니다!!!!
귀찮게해서 죄송합니다 ㅠㅠㅠ
imageProgram arguments 영역 (혹시 몰라서 사진 첨부했습니다...ㅎㅎ)
imageimage말씀해주신 방법 적용 뒤 컴퓨터 재부팅하고 실행 결과 아직도 콘솔 창에 한글 깨짐 현상이 발생합니다.....

https://nsmchan.tistory.com/17

위 링크도 참고해보시겠어요?

 

이 정도 했으면 적용이 되어야할거 같은데 쉽지 않네요ㅎㅎ

감사합니다 해결되었습니다 ㅎㅎㅎㅎ!!!

PDF 내용에 있는 해당 부분을 적용한 뒤

build.gradle 에 있는 다음 코드를 제거해도 된다. // providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

gradle 설정을 인텔리제이로 변경했더니 해결되었습니다 감사합니다 ㅎㅎ

항상배고픔님의 프로필 이미지
항상배고픔

작성한 질문수

질문하기