UI, Rake task, Rails console, Users API를 이용하여 사용자 패스워드를 변경할 수 있다.

 

이 글에서는 Rails console를 이용한 방법에 대해 포스팅 한다.

 

1. Rails console 열기

sudo gitlab-rails console

 

 

2. 변경할 사용자 찾기

user = User.find_by_username '사용자이름'

 

3. user.password 및 user.password_confirmation에 대한 값을 설정하여 암호 재설정

new_password = '변경할 패스워드'
user.password = new_password
user.password_confirmation = new_password

 

4. 저장

user.save!

 

5. Rails Console 종료

exit

 

 

출처 : https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password

 

Reset a user

Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

docs.gitlab.com

 

 

Gitlab 구축 또는 설정 값을 변경 한 후 다음과 같은 에러 페이지가 나오는 경우가 있다.

 

 

 

 

HTTP 상태 코드 422 는

422 Unprocessable Entity

이 응답은 서버가 요청을 이해하고 요청 문법도 올바르지만 요청된 지시를 따를 수 없음을 나타낸다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/422

 

 

422 Unprocessable Entity - HTTP | MDN

이 응답은 서버가 요청을 이해하고 요청 문법도 올바르지만 요청된 지시를 따를 수 없음을 나타냅니다.

developer.mozilla.org

 

해결방법

참 간단하게도 브라우저 쿠키 및 캐쉬 삭제 후 다시 하면 된다....

Java로 만들어진 데몬 또는 Tomcat와 같이 Java로 구동되는 WAS를 운영환경에서 사용하다보면

사용자수의 증가 등의 부하로 인해 설정된 메모리를 초과하여 Application이 뒤지거나 처리속도가 늦어지는 경우가 있다.

 

자바8에 대한 오라클 문서에 의하면 

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html

 

JVM 옵션에 메모리 설정을 별도로 해주지 않고 default로 실행할 경우 

  • Initial heap size of 1/64 of physical memory up to 1 GB
  • Maximum heap size of 1/4 of physical memory up to 1 GB

기본 Heap size는 물리적 메모리의 1/64, 최대 Heap size는 물리적 메모리의 1/4로 설정 된다.

 

아래 명령어로 현재 JVM의 기본 Heap, Perm Size를 확인할 수 있다.

 

[Linux]

(jdk1.7 이하)
java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'

 

(jdk1.8 이상)

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|metaspacesize|version'

 
[Windows]

(jdk1.7 이하)
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"

 

(jdk1.8 이상)

java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize metaspacesize version"

 

$ top

 

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|metaspacesize|version'

필자의 경우 메모리는 약 12G이고 1/64인 약 192MB와 InitialHeapSize와 1/4인 약 3G인 MaxHeapSize가 기본값으로 잡혀있는 것을 확인할 수 있다.

 

SpringFramework가 적용된 어플리케이션을 배포하다보면 

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException 에러를 마주할 때가 있다.

예를 들면 다음과 같은 예외가 발생한다.

 


[ERROR][servlet.FrameworkServlet.initServletBean:457] - Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 31 in XML document from ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 77; cvc-complex-type.2.4.c: 일치하는 와일드 카드 문자가 엄격하게 적용되지만 'util:properties' 요소에 대한 선언을 찾을 수 없습니다.
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
        at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
        at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
        at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
        at javax.servlet.GenericServlet.init(GenericServlet.java:158)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5266)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5554)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1263)
        at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1948)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 77; cvc-complex-type.2.4.c: 일치하는 와일드 카드 문자가 엄격하게  적용되지만 'util:properties' 요소에 대한 선언을 찾을 수 없습니다.


 

이유는?

대부분은 개발환경은 인터넷이 되는 환경일 것이다.

배포환경이 방화벽이나 망분리로 인해 아웃바운드가 막혀있을 경우 스프링 설정파일에

정의되어 있는 xsd 정의를 불러오지 못해서 발생한다.

 

필자의 에러를 살펴보면

 

[/WEB-INF/spring/appServlet/servlet-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 77; cvc-complex-type.2.4.c: 일치하는 와일드 카드 문자가 엄격하게 적용되지만 'util:properties' 요소에 대한 선언을 찾을 수 없습니다.

 

즉, servlet-context.xml 에서 util의 properties 요소를 찾을 수 없어서 발생하였다.

 

해당 파일의 상단을 보면 아래와 같이 정의가 되어 있는데

 

http://www.springframework.org/schema/util/spring-util-3.1.xsd 에 접근을 하지 못했기 때문이다.

 

 

해결방법

모든 xsd는 spring관련 jar에 포함되어 있고, beans에 관련된 파일은 spring-beans-${springframework.version}.jar에 있다.

 

 

그러므로 xsd를 인터넷에서 받아오는 것이 아닌 프로젝트의 jar 안에 있는 파일을 참조하게 하면 된다.

 

http://www.springframework.org/schema/util/spring-util-${springframework.version}.xsd 

=> classpath:org/springframework/beans/factory/xml/spring-util-${springframework.version}.xsd 변경

 

 

 

+ Recent posts